正規表現の最短マッチがようわからんようなったがな[お仕事]
(2012-08-07 19:03:51) by shinoda


Perl v5.8.5 の正規表現なんじゃけど、例えば、

<div class="hoge1">
<div class="hoge2">
ほげほげ
</div>
<div class="hoge3"></div>
</div>わたしは恥知らずな夜のホームラン王よ!<div class="date">[ 8/6 12:48 ]</div>

みたいなテキスト(HTML ソース)があったとして、

/\/div>(.*?)<div class=\"date\">\[(.*?)\]/gs

みたいなマッチング条件だと、

$1に

<div class="hoge3"></div>
</div>わたしは恥知らずな夜のホームラン王よ!

がセットされてしまう。最短マッチの(.*?)っていう条件にしてるのに、最長マッチしたものがセットされているってわけだ。

で、

/.+\/div>(.*?)<div class=\"date\">\[(.*?)\]/gs

みたいに、頭に .+ という「任意の数文字」という条件を足すと、ちゃんと

わたしは恥知らずな夜のホームラン王よ!

だけを取ってくる。

何、これ?

正規表現の神よ、なんで .+ を付けるだけで結果が変わってくるのん?.*?って最短マッチしてるんだから、その前に任意の文字があろうがなかろうが関係ないやん。
なんでぇ?教えてぇ?

コメント(3)
次の記事へ >
< 前の記事へ
TOPへ戻る

Powered by
MT4i 3.0.8