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
みたいに、頭に .+ という「任意の数文字」という条件を足すと、ちゃんと
わたしは恥知らずな夜のホームラン王よ!
だけを取ってくる。
何、これ?
正規表現の神よ、なんで .+ を付けるだけで結果が変わってくるのん?.*?って最短マッチしてるんだから、その前に任意の文字があろうがなかろうが関係ないやん。
なんでぇ?教えてぇ?