ホームページ  >  記事  >  バックエンド開発  >  PHP の通常の貪欲形式と遅延モード

PHP の通常の貪欲形式と遅延モード

WBOY
WBOYオリジナル
2016-06-13 13:14:02791ブラウズ

PHP の通常の貪欲モードと遅延モード
Greedy モード
正規表現に繰り返しを受け入れる修飾子が含まれている場合、通常の動作は、できるだけ多くのパターンと一致します (式全体が一致するという前提で)。おそらく多くのキャラクター。
この式 a.*b について考えてみます。これは、a で始まり b で終わる最長の文字列と一致します。これを使用して aabab を検索すると、文字列 aabab 全体と一致します。これを貪欲マッチングと呼びます。

遅延モード
場合によっては、遅延マッチング、つまりできるだけ少ない文字のマッチングが必要になることがあります。上記の修飾子は、 の後に疑問符 ? を追加することで遅延マッチング パターンに変換できます。このように、.*? は、 を任意の数繰り返して一致させることを意味しますが、一致全体が成功する最小の繰り返しを使用します。次に、例の遅延バージョンを見てみましょう:

a.*?b は、a で始まり b で終わる最も短い文字列と一致します。 aababに適用すると、aab(1~3文字目)とab(4~5文字目)が一致します。

例 2
必須文字列: src="http://www.bloghome.cn/1.mp3" type="application/x - mplayer2" で一致する結果が見つかりました: http://www.bloghome.cn/1.mp3

一致する式が次のように書かれている場合: /src="(.*)"/

$str ='src="http://www.bloghome.cn/1.mp3" type="application/x-mplayer2"'; 
preg_match('/src="(.*)"/', $str, $matches);

$matches[1] の結果は http://www.bloghome.cn/1.mp3" type="application/x-mplayer2です。二重引用符のマッチングは貪欲モードです。

一致する式が /src="(.*?)"/ のように記述されている場合、$matches[1] の結果は http://www です。 bloghome.cn/1.mp3


の後ろの終了区切り文字/意味、

がパターン引用符で使用されている場合に注意してください。
/i は大文字と小文字を区別しないことを意味します。
/s は空白文字と一致することを意味します。
/U はパターン反転を意味します。つまり、貪欲マッチング モードは遅延マッチング モードになり、遅延マッチング モードは貪欲マッチングになります。パターン

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。