by shigemk2

当面は技術的なことしか書かない

同じパターンの入れ子にはマッチさせられない

例えば以下のような、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