例えば以下のような、2つのdivが入れ子になっているHTMLがあったとして、2つのdiv全てにマッチする正規表現を書くとする。
<div .... > <div .... > 中身 </div> </div>
しかし最短一致の正規表現である
<div[\s\S]*?>[\s\S]*?</div>
を利用しても、
<div .... > <div .... > 中身 </div>
までしかマッチしない。まあ当たり前といえば当たり前である。最短一致なので
divタグに最も近いdivの閉じタグがマッチするからである。
だからと言って最長一致もダメだ。確かに上のHTMLだけで完結するなら、
<div[\s\S]*?>[\s\S]*</div>
でもよいだろうが、こんなHTMLが出たらもうアウトである。
<div .... > <div .... > 中身 </div> </div> <div .... > 中身 </div>
このように書いてもいいけど
<div[\s\S]*?>[\s\S]*?<div[\s\S]*?>[\s\S]*?</div>[\s\S]*?</div>
もう何の事やら全く訳が分からなくなってしまうので、プログラムと組合せる必要があるんDA