toxic steel
Новичок
помогите облегчить регулярку [транслит Ё по версии МВД РФ от 20.07.2000 г.]
возможно ли нижеследующее творение привести в более изящный вид?
смысл регулярки - транслитерация буквы Ё с учётом приложения № 5, приказа № 782 МВД РФ от 20.07.2000 г.
однако мвд маловато будет, надо чтоб красиво было . затык в том, что на выходе могут быть как одиночные символы, так и дифтонги, и очень не хочется поиметь строки вида YOzhik, например.
т.е. сперва смотрим что у нас мвд наприказывало, после чего прикидываем окружение, исходя из логики, что если до Ё есть еще прописная, то оставлять выход в верхнем регистре, если после идут строчные - в дифтонге второй тон описывать строчной.
отдельностоящие литеры по дефолту выводятся строчными, начиная со второго тона, первый -исходя из учёта начального регистра. с теми, что входили строчным, подобные церемонии излишни, кажется.
в общем треба РегЭкспАртОбъект замутить, один, наверное, лучше уже не сделаю
+ еще один массив с заменами, которые в коментах прописаны и preg_replace, собственно.
UPD:
заменил на:
вроде работает.
Any ideas...
возможно ли нижеследующее творение привести в более изящный вид?
смысл регулярки - транслитерация буквы Ё с учётом приложения № 5, приказа № 782 МВД РФ от 20.07.2000 г.

однако мвд маловато будет, надо чтоб красиво было . затык в том, что на выходе могут быть как одиночные символы, так и дифтонги, и очень не хочется поиметь строки вида YOzhik, например.
т.е. сперва смотрим что у нас мвд наприказывало, после чего прикидываем окружение, исходя из логики, что если до Ё есть еще прописная, то оставлять выход в верхнем регистре, если после идут строчные - в дифтонге второй тон описывать строчной.
отдельностоящие литеры по дефолту выводятся строчными, начиная со второго тона, первый -исходя из учёта начального регистра. с теми, что входили строчным, подобные церемонии излишни, кажется.
в общем треба РегЭкспАртОбъект замутить, один, наверное, лучше уже не сделаю
PHP:
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 */
);
UPD:
PHP:
"/(?<=\b)Ё(?=\b|[a-zа-я])/", // инициалы Yo
"/(?<=(?i:[аеёиоуъыьэюя]))Ё(?=[a-zа-я])/", // после гласных Yo
PHP:
"/(?<=(\b)|(?i:[аеёиоуъыьэюя]))Ё(?=(?(1)\b)|[a-zа-я])/"
Any ideas...