помогите регулярку облегчить

Linkpusher
На сайте с 28.12.2007
Offline
176
703

возможно ли нижеследующее творение привести в более изящный вид?

смысл регулярки - транслитерация буквы Ё с учётом приложения № 5, приказа № 782 МВД РФ от 20.07.2000 г. :)

однако мвд маловато будет, надо чтоб красиво было :) затык в том, что на выходе могут быть как одиночные символы, так и дифтонги, и очень не хочется поиметь строки вида YOzhik, например.

т.е. сперва смотрим что у нас мвд наприказывало, после чего прикидываем окружение, исходя из логики, что если до Ё есть еще прописная, то оставлять выход в верхнем регистре, если после идут строчные - в дифтонге второй тон описывать строчной.

отдельностоящие литеры по дефолту выводятся строчными, начиная со второго тона, первый -исходя из учёта начального регистра. с теми, что входили строчным, подобные церемонии излишни, кажется.

в общем треба РегЭкспАртОбъект замутить, один, наверное, лучше уже не сделаю :o

array

(
"/(?<=(?i:[жчшщ]))Ё/", /* E */
"/(?<=(?i:[жчшщ]))ё/", /* e */

"/(?<=\b)Ё(?=\b|[a-zа-я])/", /* инициалы Yo */
"/(?<=\b|(?i:[еёиоуъыьэюя]))Ё(?=[A-ZА-Я])/", /* инициалы/последующие прописные YO */

"/(?<=(?i:[еёиоуъыьэюя]))Ё(?=[a-zа-я])/", /* после гласных Yo */
"/(?<=(?i:[еёиоуъыьэюя]))ё/", /* после гласных yo */

"/(?<=(?i:[бвгдзйклмнпрстфхц]))Ё(?=[A-ZА-Я])/", /* после согласных YE */
"/(?<=(?i:[бвгдзйклмнпрстфхц]))Ё(?=[a-zа-я])/", /* после согласных Ye */
"/(?<=(?i:[бвгдзйклмнпрстфхц]))ё/", /* после согласных ye */

/* далее запчасть от ГОСТ 16876-71, однако заодно видно неучтеные варианты */

"/Ё(?=[a-zа-я])/", /* Jo */
"/Ё/", /* JO */
"/ё/" /* jo */
);

+ еще один массив с заменами, которые в коментах прописаны и preg_replace, собственно.

Точу ножи. Буквально. Есть отзывы. Заказать заточку в МСК и Подольске можно через Телеграмм.
malls
На сайте с 08.08.2005
Offline
255
#1

Почитал приказ - только одно на ум приходит - "Ё-моЁ!"

ЗЫ: По топику - судя по приказу - как ни крути, все равно что-нибудь подобное и получится.

Linkpusher
На сайте с 28.12.2007
Offline
176
#2

Вот эти строки дюже просятся:

"/(?<=\b)Ё(?=\b|[a-zа-я])/",                     // инициалы Yo 

"/(?<=(?i:[еёиоуъыьэюя]))Ё(?=[a-zа-я])/", // после гласных Yo
malls:
Почитал приказ - только одно на ум приходит - "Ё-моЁ!"

я трое суток их читал :) госты, сэвы, iso, lc, bgn, bsi, правки, дополнения, приказы. думал тронусь :)

но есть очевидный плюс : регулярно приходится просить изменить написание моих имени и фамилии способом, наиболее комфортным для меня. удивительно, но порой подобная просьба не находит понимания. оказывается, данный способ как раз и рекомендован актуальными документами, буду таскать с собой их для всяхих папирверов :)

следующим пунктом будет разбор Ф не по госту, а по изначальному заимствованию, th|ph|f. но это не скоро, морально созреть надо, там регуляркой не отделаться :)

toxic steel добавил 20.12.2008 в 08:49

toxic steel:
Вот эти строки дюже просятся:
"/(?<=\b)Ё(?=\b|[a-zа-я])/",                     // инициалы Yo  

"/(?<=(?i:[аеёиоуъыьэюя]))Ё(?=[a-zа-я])/", // после гласных Yo

насоставлял, вроде работает:

"/(?<=(\b)|(?i:[аеёиоуъыьэюя]))Ё(?=(?(1)\b)|[a-zа-я])/"

any ideas 🚬

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий