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

スポンサーサイト

--/--/-- -- [Edit]

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[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
SE&ビジネスパーソンとしてお勉強中なブログ
Next
サブプライム後に何が起きているのか

Comments

 
 
 
 
 
 
 
  非公開コメント
 

Track Backs

TB URL 

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

ブログ内検索

カテゴリー

最近の記事

最近のコメント

最近のトラックバック

RSSリンク

Amazon

楽天 人気商品

なかのひと

iKnow

Dictationバッジ

合わせて

あわせて読みたいブログパーツ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。