作者: 閑舎
日時: 2004/1/04(22:56)
"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/