まず第一に、文字通り毎分数十回しか実行していない場合、この場合のパフォーマンスについてそれほど心配する必要はありません。これらの一致は非常に迅速であり、次のようにパターン配列を反復処理して preg_match を個別に呼び出すことで、パフォーマンスの問題が発生するとは思いません。
$matches = false;
foreach ($pattern_array as $pattern)
{
if (preg_match($pattern, $page))
{
$matches = true;
}
}
or
実際、一部の人が提案しているように、演算子を使用してすべてのパターンを 1 つに結合できますが、 |
. パターンのいずれかにor 演算子が含まれていると、これはひどく壊れます。
少なくとも次のような括弧を使用してパターンをグループ化することをお勧めします。
foreach ($patterns as $pattern)
{
$grouped_patterns[] = "(" . $pattern . ")";
}
$master_pattern = implode($grouped_patterns, "|");
しかし...これがより高速になるかどうかはよくわかりません。 preg_match であろうと PHP であろうと、何かがそれらをループする必要があります。推測する必要がある場合、個々の一致はほぼ同じくらい速く、読みやすく、維持しやすいと思います。
最後に、パフォーマンスがここで求めているものである場合、最も重要なことは、正規表現以外の一致を単純な「文字列を含む」チェックに引き出すことだと思います。あなたのチェックのいくつかは、「このサイトは閉鎖されています」がページにあるかどうかを確認するなどの単純な文字列チェックでなければならないと思います.
これを行う:
foreach ($strings_to_match as $string_to_match)
{
if (strpos($page, $string_to_match) !== false))
{
// etc.
break;
}
}
foreach ($pattern_array as $pattern)
{
if (preg_match($pattern, $page))
{
// etc.
break;
}
}
できるだけ多くを避けるpreg_match()
ことは、おそらくあなたの最善の利益になるでしょう. strpos()
よりもはるかに高速ですpreg_match()
。