モノノフ日記

普通の日記です

Re: 正規表現は難しすぎる

正規表現を調べてたら見つけた記事「Blogger Alliance | 404 Not Found」へのトラックバックです。1ヶ月前の記事なのでもう解決されてるかもしれませんが自分の理解が合ってるかの確認も兼ねて書いてみました。

$ perl -MData::Dumper -E"print Dumper ['a'=~/\G(.*)\z/g]"
の出力が、

$VAR1 = [
'a',
''
];
になる理由がわからない。下の空文字列は何?

$VAR1 = [
'a',
];
こうなるか、もしくは無限ループするのが正しいと思うんだけど。

http://blog.livedoor.jp/listening_wind/archives/50804429.html

たぶん文字列マッチングのところを (.*) とスターで指定してあるため、\G でマッチの先頭が 'a' の後ろ側にきた後にもマッチングを試そうとして何もないよ、という結果が空文字として返ってしまってるんではないかと思います。

(.+)とかにすれば想定している結果になります。