多数の文字列を正規表現で解析する必要があるシナリオでは、すべてのテストで同じ RegEx ニードルが使用されることを考慮すると、高速になります。
- 配列内の各文字列を個別にテストするには、または;
- すべてを単一の大きな文字列に連結して、一度だけテストするには?
文字列の配列を処理するために RegEx エンジンを複数回起動する必要がないので、番号 2 が最適だと思いました。しかし、PHP (PCRE) でいくつかのテストを行った後、それは正しくないように思われました。
基準
PHP 5.3 (ソースコード)で簡単なベンチマークを作成したところ、次の結果が得られました。
5 秒で122185 回のインタラクションが配列内の複数の小さな文字列をテスト
単一の大きな文字列テストを実行して、5 秒間で26853回の対話
したがって、最初の方法は最大 5 倍高速であると結論付けなければなりません。ただし、これを確認する信頼できる回答を求めたいと思います。私が知らないPHPの最適化のために、私は物事を誤って想定している可能性があります。
特にPCREではなく、正規表現でテストする前に大きな文字列をフラグメント化することは、常により最適化されたソリューションですか?
preg_grep()
この関数はここでは考慮されるべきではないと思います。これはベンチマーク テストであり、最適化の問題ではありません。関数が PHP 固有のメソッドであることは言うまでもありません。また、preg_match_all
一致したすべての部分文字列を返しますが、一致しpreg_grep
た配列要素を示すだけです。