阅读了这篇文章,介绍了两种不同的正则表达式算法(Perl 5.8.7和Thompson NFA),后者比前者快了近100万倍,根据文章所述。我每天都使用PHP,并且经常使用正则表达式,因此我想知道PHP使用哪种算法。
我找到了这个问题,但它只适用于JavaScript。其中一个答案指出JavaScript使用Thompson NFA算法,但这当然会因实现而异。我认为PHP可能在移动到其
我查阅了PHP PCRE documentation,但就我所见,它并没有说明使用的是哪种算法。缩写
PHP使用哪种正则表达式算法?它是“Perl 5.8.7风格”,还是使用更快的Thompson NFA算法,或者完全使用其他算法?它甚至可以使用Perl后端运行其表达式吗?
如果PHP确实使用Perl风格的算法,那么它到底是什么?我正在寻找与其他算法相关的抽象定义/解释。
我找到了这个问题,但它只适用于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风格的算法,那么它到底是什么?我正在寻找与其他算法相关的抽象定义/解释。
re2
的库,它使用传统的正则表达式,在某些输入上速度更快,特别是在大型输入上。php-re2
是对re2
的PHP绑定;我不知道它是否好用。 - Danica