by shigemk2

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

最長一致と最短一致

このようなHTMLがあったとして、

<p class="entry">p要素です。</p>
....
</html>

このHTMLにだけマッチする正規表現を書きたいとする。

<p class="entry">

でも、

<p[\s\S]*>

と書いたら、全てのHTMLにマッチしてしまう。\s\Sが全ての文字にマッチするので、

<p>hoge</p><p>fuga</p>

の最初の<と最後の>にマッチしてしまうからである。

  1. や*などを含むパターンにマッチさせる場合、出来る限り長い文字列にマッチしようとする。これを最長一致という。

で、上のように最初のpタグにだけマッチさせたい場合は、

<p[\s\S]*?>

と書けばいい

また、

<p class="entry">p要素です。</p>

だけにマッチさせたいときは、

<p[\s\S]*?>[\s\S]*?</p>

と書く。