UTF-8: быстрые регулярные выражения в PHP
Утром я написал пост о производительности различных движков регулярных выражений, а весь день перебирал разные варианты, смотрел подробности и так далее.
Как я уже писал, мне понравилась библиотека RE2, я даже скомпилировал её и посмотрел, к сожалению, оказалось, что она использует треды, а в PHP с этим не очень (не все модули PHP thread safe, поэтому чаще всего PHP собирается без поддержки тредов).
Я уже начал смотреть другие библиотеки, когда Алексей Захлестин напомнил мне про модуль PHP Multibyte String (функции mb_*), который содержит в себе движок регулярных выражений Oniguruma.
Я всегда плохо относился к этому движку, так как считал, что у него очень бедные возможности для работы
Сегодня я присмотрелся к движку получше. Конечно, PCRE он не заменит, но некоторых случаях вполне сможет его подменить как быстрый аналог, только надо применять несколько правил (речь идёт о версии 4.7.1, которая в PHP):
Я погонял тесты, сравнивал PCRE в режиме полном
bolk-dev ~/regexp-benchmark $ php test.php
PCRE Full UTF-8: 1.0458080768585
Oniguruma: 0.24942803382874
Комментарии 12
ereg действительно медленее preg, всё верно.
ereg — это библиотека POSIX regular expression
preg — это библиотека PCRE
mb_ereg — это библиотека Oniguruma
А естькакой-то рассказ на эту тему?
В конце 2007 я увлёкся идеей wiki, начал пользоваться wackowiki и в процессе эксплуатации понял, что мне очень не хватает поддержки юникода. Сейчас уже не помню, почему, но думаю, что считал поддержку юникода жизненно важной фичей. Начал исправлять и втянулся.
когда-нибудь я к нему вернусь…
Реализовал поддержку юникода с помощью расширения mbstring и mb_ereg, перенёс работу с БД на AdoDb, переписал всё в ООП стиле, локализацию переделал на gettext. В общем, учился программировать на PHP.
Потом меня обнаружили ребята, которые сейчас занимаются проектом http://sourceforge.net/projects/wackowiki/ и предложили делать 5 версию на основе мой модификации. Но я слишком увлёкся рефакторингом и не смог довести проект до релиза. Интерес к проекту угас и он так и остался лежать в папке незавершенных. Может быть
Кстати, помнится, что я связывался с Костей Коломейцом с предложением отдать wackowiki под GPL или сотрудничать, но он в начале 2008 года говорил, что Яндекс сам уже к лету 2008 выпустит версию с utf8 и прочими плюшками. Видимо это тоже повлияло на решение не продолжать проект.
Залил сюда https://bitbucket.org/alexcrown/kex
:))
Напиши статью на «Хабре», глядишь подхватят проект.
Ага, спасибо!
Подскажите куда копать?
Благодарю!