ドメイン名、または「可変部分」を持たないURLを除外する場合、解決策は、URLのみを含み、適切なインデックスを持つテーブルを備えたデータベースを使用し、クイックマッチを実行することです。
URLを処理してはならないかどうかを判断することは、問題であるか、そのDBに対して簡単なクエリを実行するだけです(これは通常、「URLが等しい」または「URLはで始まる」を意味します) -これはSQLiteと同じくらい簡単です。 DB。ファイルに収まり、追加のサーバーを必要としません。
PHP配列のアイデアには、1つの欠点があります。配列が大きくなると、それをメモリに格納するためだけに、ますます多くのメモリが必要になります。そして、いつの日か、メモリを使いすぎて、ヒットするでしょう。memory_limit
; 数千を超えるURLがある場合、そのソリューションは最適なソリューションではない可能性があります。
それでも、URLまたはパターンが2つしかない場合は、PHP配列をループして、各値をstrpos
("contains"または"starts with"の場合)またはpreg_match
(regexの場合)と比較すると問題ありません。 -そして、実装するのが最も簡単なものです。
複雑なマッチングルールを使用する場合は、ある種の正規表現を使用することがおそらく唯一の現実的な方法です... PHP側、with preg_match
、またはSQLサーバー(たとえば、MySQLは正規表現をサポートしています。私の知る限り、パフォーマンスについてはわかりませんが、11.4.2を参照してください。詳細については正規表現)