Какой алгоритм регулярных выражений использует PHP?


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

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

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

Какой алгоритм регулярных выражений использует PHP? Это "Perl 5.8.7 стиль", или он использует гораздо более быстрый алгоритм NFA Томпсона, или совсем другой? Может ли он даже использовать серверную часть Perl для запуска своих выражений?

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

Author: Community, 2012-04-19

1 answers

Из руководства:

Http://www.php.net/pcre:

Регулярные выражения ( Совместимые с Perl)

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

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

 5
Author: Jonathan Kuhn, 2012-04-18 23:36:15