#.*#/u
27 января 2010 года, 19:27
У регулярных выражений PHP есть специальный модификатор u для работы со строками в кодировке UTF-8. Оказывается, вставлять этот модификатор во все подряд регулярные выражения не только бессмысленно, но и вредно. Если шаблон может работать после удаления модификатора u, то он будет работать без него быстрее, зачастую существенно быстрее.
Вообще-то, знакомства с устройством кодировки UTF-8 достаточно, чтобы понять, почему строки в этой кодировке обрабатываются медленнее. Однако я не сопоставил этот факт с тем, что неоправданное употребление модификатора u может сильно замедлить регулярное выражение, и обнаружил такое замедление случайно.
Когда же модификатор u необходим? Только тогда, когда в регулярном выражении указывается количество символов или в квадратных скобках присутствуют символы, не входящие в нижнюю половину таблицы ASCII.
В процессе оптимизации можно попытаться изменить регулярное выражение и убрать из него модификатор u.
Как всегда, лучше проверять на практике необходимость модификатора u в каждом конкретном регулярном выражении и его влияние на время выполнения скрипта.
Когда я впервые увидел этот пример в интернете, подумал, что это проблема на ровном месте. Да, мнения людей об ответе расходятся: кто-то отвечает 1, а кто-то 9.
2023
Как вы думаете, что выведут следующие операторы? echo preg_match('#тес#iu', 'Такой Вот Тест');
2011
Вопрос о «плохих» данных в UTF-8. Иногда такое знание оказывается полезным.
2010
Бывает полезно выделить ссылки, ведущие с вашего сайта на другие.
2006
Эта статья написана для начинающих веб-мастеров.
2006
Оставьте свой комментарий