помогите облегчить регулярку [транслит Ё по версии МВД РФ от 20.07.2000 г.]

toxic steel

Новичок
помогите облегчить регулярку [транслит Ё по версии МВД РФ от 20.07.2000 г.]

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

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

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

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

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

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

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                                */
);
+ еще один массив с заменами, которые в коментах прописаны и preg_replace, собственно.

UPD:
PHP:
"/(?<=\b)Ё(?=\b|[a-zа-я])/",                      // инициалы Yo   
"/(?<=(?i:[аеёиоуъыьэюя]))Ё(?=[a-zа-я])/",        // после гласных Yo
заменил на:
PHP:
"/(?<=(\b)|(?i:[аеёиоуъыьэюя]))Ё(?=(?(1)\b)|[a-zа-я])/"
вроде работает.

Any ideas...
 
Сверху