作者: Kazuhiro NISHIYAMA
日時: 2006/6/13(15:07)
西山和広です。

>>> Mon, 12 Jun 2006 18:12:33 +0900 (JST) の刻に
>>> kbk@...(Bruce.) 氏曰く
> 
> Perlのこの仕様は意図的なものです。perlreに、
> 
> 高レベルループは繰り返しの間で付加的な状態:
> 最後のマッチが長さゼロかどうか、を保持します。
>  ループから抜けるには、
> 長さゼロのマッチに後続するマッチでは長さゼロのマッチを禁止します。
> この禁止はバックトラッキングと相互作用するので、 
> 最善(best)のマッチが長さゼロであった場合には 
> 次善(second best)のマッチが選択されます。
> 
> For example:
> 
>     $_ = 'bar';
>     s/\w??/[$&]/g;
> 
> 
> この結果は [][b][][a][][r][]となります。
> 貪欲でない(non-greedy) ??
> によって与えられる最善のマッチの各位置は長さゼロのマッチとなり、
> 次善 (second best)のマッチは \wにマッチとなります。
> したがって、長さゼロのマッチは長さ1のマッチによって置き換えられます。
> 
> という記述があります。
> #サンプル例からするとZnZさんは既にこれをご存知?

元々は
http://homepage2.nifty.com/zn/nnikki/200101.html#30_t1
の頃の話を最近でも変わっていないかどうか確かめてみただけなのですが、
確かperlreの説明の例をそのままRubyでも試しただけだった気がします。

# tdiaryに書くときに<>から[]に変えたのは&lt;&gt;にするのが面倒だったから。


-- 
|ZnZ(ゼット エヌ ゼット)
|西山和広(Kazuhiro NISHIYAMA)