"Ueta Masayuki" <masa@...> さん wrote.
> $を付けると、どうして最後にある(quiz)だけにマッチし
> ないで、(test)以降(quiz)までにマッチするのでしょう
> か。
> ...
> なお、Perlでも同じことをやってみました。結果は同じで
> す。
>
> $str = 'That is a (test). This is a (quiz)';
> ...
> @n = $str =~ /(\(.+?\))$/g;
> print @n,"\n";
> print scalar @n,"\n";
一種のバグ、というか、見解の相違のようなものではないでしょうか。+? は比
較的新しい表現ですから、こういうこともあるんだと思います。
\(.+? とした時点で、最短一致なわけですが、. は何でもよいわけで、( でも )
でもいい。そうして regex-0.12 あたりのライブラリが文字を探し始め、test)
に行き着いたところ $ でないからダメとなり、さらに探しつづける。その結果、
quiz) で終る、と思われます。
つまり、test) を見ても . は何でもよいだから諦めず、探しつづける、ここに
問題があります。こちらの意図を明確にするには、やはり、+? であっても
@n = $str =~ /(\([^)]+?\))$/g;
とするしかないでしょう。
--
本田博通(閑舎)
テキストとスクリプトの http://rakunet.org/TSNET/