根据文章,在阅读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样式算法,究竟是什么?我正在寻找与其他算法相关的抽象定义/解释。
答案 0 :(得分:5)
从手册:
正则表达式( Perl-Compatible )
http://www.php.net/manual/en/intro.pcre.php:
PCRE库是一组实现常规的函数 表达式模式匹配使用相同的语法和语义 Perl 5,只有一些差异(见下文)。目前 实现对应于Perl 5.005。