2012-04-18 1 views
9

После прочтения this article о двух различных типах алгоритмов регулярного выражения (Perl 5.8.7 и Thompson NFA), которые в 1 000 000 раз быстрее, чем первые, согласно статье. Я использую PHP ежедневно и довольно часто использую regex, поэтому мне хотелось знать, какой алгоритм использует PHP.Какой алгоритм регулярного выражения использует PHP?

Я нашел this question, однако это только для JavaScript. В одном из ответов говорится, что JavaScript использует алгоритм Thomson NFA, но это, конечно, будет отличаться от реализации к реализации. Я думаю, что PHP, возможно, переключился на использование более быстрых алгоритмов, когда он переместился в набор функций, обесценив ereg_*.

Я просмотрел PHP PCRE documentation и, насколько я мог видеть, он ничего не говорит о том, какой алгоритм он использует. Акроним PCRE, мне подсказывает, что он использует Perl Compatible Regular Expressions, поэтому я предполагаю, что он использует алгоритм стиля Perl.

Какой алгоритм регулярного выражения использует PHP? Это «Perl 5.8.7 style», или он использует гораздо более быстрый алгоритм Thompson NFA, или другой полностью? Может ли даже использовать Perl-сервер для выполнения его выражений?

Если PHP делает, используйте алгоритм стиля Perl, что это такое? Я ищу абстрактное определение/объяснение по отношению к другим алгоритмам.

+2

Вы правы, PCRE действительно поддерживает регулярные выражения, совместимые с Perl. Однако это не алгоритм. – BoltClock

+2

PCRE обычно означает библиотеку [pcre library] (http://en.wikipedia.org/wiki/Pcre), хотя и использует альтернативные алгоритмы в стиле Perl. Тем не менее, подход IIRC NFA видит только высокую производительность для типичных типов запросов на огромных наборах данных; 1 000 000 раз является резким преувеличением для типичных приложений. – Dougal

+1

Обратите внимание, что автор этой статьи реализовал библиотеку с именем ['re2'] (http://code.google.com/p/re2/), которая использует традиционные регулярные выражения и, следовательно, быстрее на некоторых входах, особенно больших , ['php-re2'] (https://github.com/arraypad/php-re2) - это набор привязок PHP к' re2'; Я понятия не имею, хорошо ли это. – Dougal

ответ

5

Из инструкции:

http://www.php.net/pcre:

регулярных выражений (Perl-Compatible)

http://www.php.net/manual/en/intro.pcre.php:

Библиотека PCRE представляет собой набор функции, которые выполняют t regular сопоставление шаблонов выражений с использованием того же синтаксиса и семантики, что и Perl 5, с несколькими отличиями (см. ниже). Текущая реализация соответствует Perl 5.005.

 Смежные вопросы

  • Нет связанных вопросов^_^