PHP の preg_match() 関数は、正規表現を実行するためによく使用される関数です。preg_match の使い方を詳しく紹介します。
機能の使い方
int preg_match_all (文字列パターン、文字列件名、配列一致 [, int フラグ] )
例1
コードは次のとおりです | コードをコピー |
preg_match_all ("|<[^>]+>(.*)]+>|U","例: これはテストです ",$out, PREG_SET_ORDER);print $out[0][0].", ".$out[0][1]."n"; print $out[1][0].", ".$out[1][1]."n"; ?>
この例では次のように出力されます:
|
例 2
URLからドメイン名を抽出します
コードは次のとおりです | コードをコピー |
//URLからホスト名を取得 この例では次のように出力されます: ドメイン名は: PPP.ネット |
preg_match 文字列の長さの問題
preg_match は、対象のコンテンツを抽出するために通常のルールを使用します。生死にかかわる問題があり、コードは徹底的にテストされます。
後で、PHP の preg_match には文字列の長さ制限があるのではないかと思いましたが、案の定、「pcre.backtrack_limit」の値はデフォルトで 100000 にのみ設定されていることがわかりました。
解決策:
コードは次のとおりです | コードをコピー |
ini_set('pcre.backtrack_limit', 999999999); |
注: このパラメータは、PHP 5.2.0 バージョン以降で使用できます。
さらに、: pcre.recursion_limit について話しましょう
pcre.recursion_limit は PCRE の再帰制限です。この項目を大きな値に設定すると、すべてのプロセスの使用可能なスタックが消費され、最終的に PHP がクラッシュします。
設定を変更して制限することもできます:
コードは次のとおりです | コードをコピー |
ini_set('pcre.recursion_limit', 99999); |
実際のプロジェクト アプリケーションでは、メモリを制限するのが最善です: ini_set('memory_limit', '64M'); これはより安全です。