PHP使用哪种正则表达式算法?

时间:2012-04-18 22:20:23

标签: php regex algorithm pcre

根据文章,在阅读this article关于两种不同类型的正则表达式算法(Perl 5.8.7和Thompson NFA)后,后者比前者快〜1,000,000倍。我每天使用PHP,并且使用正则表达式,所以我想知道PHP使用哪种算法。

我找到this question,但它只适用于JavaScript。其中一个答案表明JavaScript使用Thompson NFA算法,但这当然会因实现而异。我认为PHP可能已经转向使用更快的算法,当它转移到它的PCRE函数集时,弃用了ereg_*的东西。

我查看了PHP PCRE documentation,就我所见,它没有告诉我它使用的算法。对我来说,首字母缩略词PCRE告诉我它使用Perl Compatible Regular Expressions,因此我假设它使用Perl样式算法。

PHP使用哪种正则表达式算法?它是“Perl 5.8.7风格”,还是使用更快的Thompson NFA算法,还是完全使用另一个算法?它甚至可以使用Perl后端来运行它的表达式吗?

如果PHP 使用Perl样式算法,究竟是什么?我正在寻找与其他算法相关的抽象定义/解释。

1 个答案:

答案 0 :(得分:5)

从手册:

http://www.php.net/pcre

  

正则表达式( Perl-Compatible

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

  

PCRE库是一组实现常规的函数   表达式模式匹配使用相同的语法和语义   Perl 5,只有一些差异(见下文)。目前   实现对应于Perl 5.005。