Я заметил, что в библиотеке регулярных выражений PHP есть выбор между ereg и preg. В чем разница? Является ли один быстрее другого, и если да, то почему более медленный не устарел?
Есть ли ситуации, когда лучше использовать один над другим?
Я заметил, что в библиотеке регулярных выражений PHP есть выбор между ereg и preg. В чем разница? Является ли один быстрее другого, и если да, то почему более медленный не устарел?
Есть ли ситуации, когда лучше использовать один над другим?
При посещении php.net/ereg отображается следующее:
Предупреждение
Эта функция УСТАРЕЛА, начиная с PHP 5.3.0, и УДАЛЕНА, начиная с PHP 6.0.0. Надеяться на эту функцию крайне не рекомендуется.
Еще немного вниз по странице и мы читаем это:
Примечание: preg_match(), в котором используется Perl-совместимый синтаксис регулярных выражений, часто является более быстрой альтернативой ereg().
Обратите внимание на мой акцент.
preg – это Perl-совместимая библиотека регулярных выражений
ereg – совместимая с POSIX библиотека регулярных выражений.
У них немного другой синтаксис, и preg в некоторых случаях немного быстрее. ereg устарел (и он удален в php6), поэтому я бы не рекомендовал его использовать.
Существует много дискуссий о том, что быстрее и лучше.
Если вы планируете когда-нибудь перейти на PHP6, ваше решение принято. В противном случае:
Общее мнение состоит в том, что PCRE является лучшим решением во всех отношениях, но если у вас есть конкретная страница с большим трафиком и вам не нужен PHP6, возможно, стоит провести некоторое тестирование. Например, из комментариев руководства по PHP:
Отказ от регулярных выражений POSIX в PHP для поиска Perl подобен замене деревянными досками и кирпичом дома со сборными комнатами и стенами. Конечно, вы можете смешивать и сочетать некоторые части, но намного проще изменить все части, разложенные перед вами.
Несмотря на то, что ereg устарел в PHP 5.3, функции mb_ereg* — нет. Я считаю, что основная причина этого заключается в том, что PHP6 перестраивает всю поддержку MB/Unicode, и поэтому старые «обычные» методы ereg бесполезны, поскольку mb_ereg будет новее/лучше.
Я знаю, что это не дает ответа на вопрос о скорости, но позволяет вам продолжать использовать как POSIX, так и PCRE.
Что ж, ereg и производные от него функции (ereg_match и т. д.) устарели в php5 и удалены в php6, поэтому вам, вероятно, лучше использовать семейство preg.
preg предназначен для регулярных выражений в стиле Perl, а ereg — это стандартное регулярное выражение POSIX.
а, ок, спасибо, я не видел этого по какой-то причине. До свидания эрег я полагаю! Принятый ответ.