akkun_choi pedia
mindiaakkun_choi pedia見出し語

基礎には載ってない正規表現

akkun_choi · 2008-10-11 更新

貪欲さ(greedy)

状況
 HTMLで、あるタグの中身だけ取得したい。そこで次のようなパターンを考えた。

パターン

|<div>(.*)</div>|

文字

<div>いちばんめ</div><div>にばんめ</div>

結果

  [全体でのマッチ] => "<div>いちばんめ</div><div>にばんめ</div>"
  [(.*)] => "いちばんめ</div><div>にばんめ"

「いちばんめ」だけを取りたいのに…!

何故こうなるかというと量指定子(*,+)は「貪欲」だからだ。貪欲である場合はパターンにマッチするものを貪欲に確保していく。

貪欲な場合

<div>*********************************** ←まず最後まで(.*)が確保
<div>いちばんめ</div><div>にばんめ</div>

<div>*****************************</div> ←後ろから調べる
<div>いちばんめ</div><div>にばんめ</div>

貪欲でない場合

<div>**                                  ←前から調べる
<div>いちばんめ</div><div>にばんめ</div>

<div>**********</div>                    ←</div>が見つかった!!
<div>いちばんめ</div><div>にばんめ</div>

貪欲でないようにするには(*?,+?)とすれば良い。
(またはU修飾子で変える手もある)

パターン

|<div>(.*?)</div>|

文字

<div>いちばんめ</div><div>にばんめ</div>

結果

  [全体でのマッチ] => "<div>いちばんめ</div>"
  [(.*)] => "いちばんめ"

やったぜ!これでHTMLなんて置換し放題だぜー

関連する見出し語