オニオンソード!!

SE&ビジネスパーソンとしてお勉強中なブログ

[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>が見つかるまで検索を続けちゃうんですね。
これを「欲張りなマッチ」と言うらしいです。
逆に最少量指定子を付けた場合を「控え目なマッチ」と言います。

以下、サンプルソース



実行結果


Prev
フォールスルー(fall through)
Top
オニオンソード!!
Next
サブプライム後に何が起きているのか

Comments

 
 
 
 
 
 
 
  非公開コメント
 

Track Backs

TB URL 

Top
オニオンソード!!

ブログ内検索

カテゴリー

最近の記事

月別アーカイブ

最近のコメント

最近のトラックバック

RSSリンク

Twitter

プロフィール

Author:グリオニ
1975年 東京生まれ 男
仕事:SE

社員数10人ほどの小さな会社で一生懸命働いています。
ここ3年ほどは、金融系のお仕事が多いです。

週末は土手で草サッカー。

iKnow

Dictationバッジ

合わせて

あわせて読みたいブログパーツ

なかのひと

Amazon商品一覧【カテゴリ別】