9

根据这篇文章,在阅读了有关两种不同类型的正则表达式算法(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 风格的算法,它到底是什么?我正在寻找与其他算法相关的抽象定义/解释。

4

1 回答 1

5

From the manual:

http://www.php.net/pcre:

Regular Expressions (Perl-Compatible)

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

The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5, with just a few differences (see below). The current implementation corresponds to Perl 5.005.

于 2012-04-18T23:36:15.257 回答