ShelestovAnt
@ShelestovAnt
Верстаю и программирую

Как объединить регулярные выражения?

Всем привет!
Подскажите пожалуйста как можно объединить следующие регулярки в одну:
...
                $rus[] = '/\bе/u';
                $rus[] = '/\bЕ/u';
                $eng[] = 'ye';
                $eng[] = 'Ye';

                $rus[] = '/(?<=(а|е|ё|и|о|у|ы|э|ю|я|ъ|ь))(е)/u';
                $rus[] = '/(?<=(А|Е|Ё|И|О|У|Ы|Э|Ю|Я|Ъ|Ь))(е)/u';
                $eng[] = 'ye';
                $eng[] = 'Ye';

                $rus[] = '/е/u';
                $rus[] = '/Е/u';
                $eng[] = 'e';
                $eng[] = 'E';

$str=preg_replace($rus,$eng,$str);

Кароче тут смысл в том что здесь происходит транслитерация слова в частности буквы "е"
Если буква "е" первая в слове то меняется на "ye", и если буква "е" идет после гласной тоже меняется на "ye". В остальных случаях на "e"

Если протестировать на словах:
Военный
Сергеевич

То результат будет такой:
Voenniy
Sergeyevich

Сергеевич правильно перевел, а вот слово "Военный" почему-то не правильно, не могу понять почему(
  • Вопрос задан
  • 351 просмотр
Пригласить эксперта
Ответы на вопрос 3
glaphire
@glaphire
PHP developer
На первый взгляд лучше сделать замены в два этапа - первым проходом сделать 'е' на 'уе', вторым позаменять остальные русские 'е'.
Ответ написан
Комментировать
profesor08
@profesor08
Заменять надо сначала трифтонги, потом дифтонги, всякие сочетания букв, и вот потом уже одиночные буковки.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Делайте в 2 этапа:
1. Размечайте токены (сочетания букв и одиночные буквы из начального слова) и указывайте нужное действие для замены каждому токену (что на что менять).
2. Производите замену каждого токена (и в самом конце: конкатенацию, для получения полного слова).

или

Соблюдайте правильный порядок внутри массива замены: сначала - 3 буквы, затем - 2, затем - оставшиеся одиночные.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы