При составлении регулярных выражений мы часто пользуемся специальными сервисами и только потом переносим эти выражения в свой код.
Иногда даже проверенные регулярные выражения могут работать не так, как ожидалось. Конечно, большинство проблем решается с помощью применения флагов или дополнительного изучения справочной информации.
Но бывают случаи, когда локальные тесты проходят успешно, а при переносе на промышленные серверы поведение «регулярки» меняется не в лучшую сторону.
Работа с кириллицей может стать корнем проблем. Вот такое регулярное выражение отказалось работать с русскими буквами на промышленном сервере заказчика:
$string = preg_replace('/[^\d\w\s\.\:-]+/u', '', $string);Изучив проблему, мы поняли, что в старых версиях PHP-модуля pcre стандартный перечень
\w не охватывает кириллические символы даже с модификатором u. Именно этот модуль реализует работу Perl-совместимых регулярных выражений в PHP.Для того чтобы ваши регулярные выражения корректно работали с русскими символами, необходимо, чтобы версия
pcre была не ниже 8.38. Проверить это можно, выполнив консольную команду$ php -i | grep PCRE