根据这篇文章,在阅读了有关两种不同类型的正则表达式算法(Perl 5.8.7 和 Thompson NFA)的文章后,后者比前者快了约 1,000,000 倍。我每天都使用 PHP,并且经常使用正则表达式,所以我想知道 PHP 使用哪种算法。
我发现了这个问题,但它仅适用于 JavaScript。其中一个答案指出 JavaScript 使用 Thompson NFA 算法,但这当然会因实现而异。我认为当 PHP 转移到它的PCRE
一组函数时,它可能已经切换到使用更快的算法,弃用了ereg_*
这些东西。
我查看了PHP PCRE 文档,据我所知,它没有告诉我它使用什么算法。对我来说,首字母缩写词PCRE
告诉我它使用Perl Compatible Regular Expressions
,所以我假设它使用 Perl 风格的算法。
PHP 使用哪种正则表达式算法?是“Perl 5.8.7 风格”,还是使用更快的 Thompson NFA 算法,还是完全使用另一种?它甚至可以使用 Perl 后端来运行它的表达式吗?
如果 PHP确实使用 Perl 风格的算法,它到底是什么?我正在寻找与其他算法相关的抽象定义/解释。