9

記事によると、2つの異なるタイプの正規表現アルゴリズム(Perl5.8.7とThompsonNFA)についてこの記事を読んだ後、後者は前者よりも約1,000,000倍高速です。私は毎日PHPを使用しており、正規表現を頻繁に使用しているため、PHPがどのアルゴリズムを使用しているかを知りたいと思いました。

この質問を見つけましたが、JavaScript専用です。回答の1つは、JavaScriptがThompson NFAアルゴリズムを使用していると述べていますが、それはもちろん実装ごとに異なります。PCREPHPが一連の関数に移行したときに、より高速なアルゴリズムの使用に切り替えた可能性があると思いますereg_*

PHP PCREのドキュメントを見てきましたが、私が見る限り、どのアルゴリズムを使用しているかについては何も教えてくれません。頭字語PCREは、私にはそれがを使用していることを示しているPerl Compatible Regular Expressionsので、Perlスタイルのアルゴリズムを使用していると思います。

PHPはどの正規表現アルゴリズムを使用しますか?それは「Perl5.8.7スタイル」ですか、それともはるかに高速なThompson NFAアルゴリズムを使用していますか、それとも完全に別のアルゴリズムを使用していますか?Perlバックエンドを使用してその式を実行することさえできますか?

PHPPerlスタイルのアルゴリズムを使用している場合、それは正確には何ですか?他のアルゴリズムとの関連で抽象的な定義/説明を探しています。

4

1 に答える 1

5

マニュアルから:

http://www.php.net/pcre

正規表現(Perl互換

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

PCREライブラリは、Perl 5と同じ構文とセマンティクスを使用して正規表現のパターンマッチングを実装する一連の関数ですが、いくつかの違いがあります(以下を参照)。現在の実装はPerl5.005に対応しています。

于 2012-04-18T23:36:15.257 に答える