Сайт Романа ПарпалакаБлог20100127

#.*#/u

27 января 2010 года, 19:27

У регулярных выражений PHP есть специальный модификатор u для работы со строками в кодировке UTF-8. Оказывается, вставлять этот модификатор во все подряд регулярные выражения не только бессмысленно, но и вредно. Если шаблон может работать после удаления модификатора u, то он будет работать без него быстрее, зачастую существенно быстрее.

Вообще-то, знакомства с устройством кодировки UTF-8 достаточно, чтобы понять, почему строки в этой кодировке обрабатываются медленнее. Однако я не сопоставил этот факт с тем, что неоправданное употребление модификатора u может сильно замедлить регулярное выражение, и обнаружил такое замедление случайно.

Когда же модификатор u необходим? Только тогда, когда в регулярном выражении указывается количество символов или в квадратных скобках присутствуют символы, не входящие в нижнюю половину таблицы ASCII.

В процессе оптимизации можно попытаться изменить регулярное выражение и убрать из него модификатор u.

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

Поделиться

С Новым годом, дизайнер Ctrl Первый релиз S2

Читайте также

Чему же равно 6:2(1+2)?
Когда я впервые увидел этот пример в интернете, подумал, что это проблема на ровном месте. Да, мнения людей об ответе расходятся: кто-то отвечает 1, а кто-то 9.
2023
Загадка специалистам по PHP
Как вы думаете, что выведут следующие операторы? echo preg_match('#тес#iu', 'Такой Вот Тест');
2011
UTF-8 bad chars
Вопрос о «плохих» данных в UTF-8. Иногда такое знание оказывается полезным.
2010
Внешние ссылки
Бывает полезно выделить ссылки, ведущие с вашего сайта на другие.
2006
Система управления шаблонами
Эта статья написана для начинающих веб-мастеров.
2006

Оставьте свой комментарий


Формулы на латехе: $$f(x) = x^2-\sqrt{x}$$ превратится в $$f(x) = x^2-\sqrt{x}$$.
Выделение текста: [i]курсивом[/i] или [b]жирным[/b].
Цитату оформляйте так: [q = имя автора]цитата[/q] или [q]еще цитата[/q].
Других команд или HTML-тегов здесь нет.

Записи