[PHP][正規表現]最短一致
2009/05/09 Sat [Edit]
phpでpreg_match_all()を使って、"<p>Red</p> or <p>Green</p>"
から「<p>Red</p>」と「<p>Green</p>」を別々に取得したかったんだけれど。
どうやっても「<p>Red</p> or <p>Green</p>」って取れちゃう。
取れすぎだから。
要は最初の<p>から最後の</p>まで全部がキャプチャされちゃう模様。
という正規表現ビギナーらしい?罠にはまりました。。
で、色々調べた結果、「最短一致」というキーワードに辿りつきました。
辿り着くのに数時間かかったし…。
いやー。初心者が「最短一致」って言葉なんて知らないってば。
ということで"/<p>.*<\/p>/"を"/<p>.*?<\/p>/"に変えればOKでした。
?(最少量指定子)を付けると最初にマッチした(この場合は</p>が見つかった)時点で検索をやめます。
?をつけないと最後の</p>が見つかるまで検索を続けちゃうんですね。
これを「欲張りなマッチ」と言うらしいです。
逆に最少量指定子を付けた場合を「控え目なマッチ」と言います。
実行結果
Comments
Track Backs
TB URL




