In article <20020329022810.68F9E17 / helium.ruby-lang.org>,
  "K.Kosako" <kosako / sofnec.co.jp> writes:

> 今の仕様は、?,*,+のどれかの繰り返し(greedyであってもなくても)が
> 連続するときはエラーにしています。
> 仕様として変であれば直します。

ふと思ったんですが、

(?:a*)??

というのは a*?, a* のどちらでもない独自の挙動を表現するものであるよう
な気がします。

% print -l b ab aab | ruby -ne 'p [/\A((?:a*)??).?b/, /\A(a*?).?b/, /\A(a*).?b/].map {|re| re =~ $_; $1}'
["", "", ""]
["", "", "a"]
["aa", "a", "aa"]

つまり、a が n回マッチするとき、
  a*? は 0, 1, ... 
  a* は n, n-1, ...
  (?:a*)?? は 0, n, n-1, ...
という順番で試すのではないだろうか、ということです。

とはいうものの、こんなことは誰も気にしないでしょうし、連続を許すように
すべきだとまではいいませんけれど。
-- 
[田中 哲][たなか あきら][Tanaka Akira]
「ふえろ! わかめちゃん作戦です$(C⊇」(Little Worker, 桂遊生丸)