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

9
阅读了这篇文章,介绍了两种不同的正则表达式算法(Perl 5.8.7和Thompson NFA),后者比前者快了近100万倍,根据文章所述。我每天都使用PHP,并且经常使用正则表达式,因此我想知道PHP使用哪种算法。
我找到了这个问题,但它只适用于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风格的算法,那么它到底是什么?我正在寻找与其他算法相关的抽象定义/解释。

2
你说得对,PCRE确实代表Perl兼容的正则表达式。然而,那不是一个算法。 - BoltClock
2
PCRE通常指的是pcre库,它使用回溯Perl风格的算法。我记得,对于大型数据集上的典型查询类型,NFA方法只能获得很大的性能提升; 对于典型应用程序来说,100万倍是一个夸张的说法。 - Danica
1
请注意,该文章的作者实现了一个名为re2的库,它使用传统的正则表达式,在某些输入上速度更快,特别是在大型输入上。 php-re2是对re2的PHP绑定;我不知道它是否好用。 - Danica
2
顺便提一下,了解MySQL使用的算法也很有趣。 - Ed Heal
@Dougal 谢谢你提供的链接。从 README 中所描述的内容来看,它看起来非常有前途,而且使用起来很简洁。 - Bojangles
1个回答

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接