Tanaka Akiraさんの<hvohemzoku6.fsf / coulee.a02.aist.go.jp>から
> % 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, ...
> という順番で試すのではないだろうか、ということです。

確かにそうですね。考えてもみませんでした。
これはエラーにならないようにしようと思います。
--
小迫@ソフネック   渋谷区恵比寿1-15-1