From: kkosako@... Date: 2003-05-23T18:04:18+09:00 Subject: [ruby-dev:20283] Re: /()*\1/ =~ "" > -----Original Message----- > From: Tanaka Akira [mailto:akr@m17n.org] > ただ、[ruby-dev:20225] にもちょっと書きましたが、MatchData#{begin,end} > がちょっと変わるかも知れないという気がします。 > > つまり、たとえば、 > /(?:()|a)*/ =~ "a" > が "a" にマッチする ($0 が "a" になる) として、() がマッチした位置 > ($~.begin(1), $~.end(0)) は 0 になるのか 1 になるのか、ということです。 > > まぁ、どっちだろうと全体がマッチするかどうかには関係ないといえばそうな > んですが。 確かにそういう問題がありました。 位置が違うということは、選択子の選択順序が違っているということになります。 対処方法を考えてみたのですが、実行コストが高そうなので、 あきらめて現状の仕様のまま(無限の繰り返しで空にマッチすると繰り返しは中断す る) ということになりそうです。 > また、/(?:()|a)*/ =~ "a" で $0 が "" になるような場合にはこんなことは > 起こらないのかも知れません。 そうなるような実装にするつもりでした。 その場合でも何も対処しないと、/(?:()|a)*$/ =~ "a" のとき同じ問題があるような 気がしますが、 これを問題だと思うのは考え過ぎ? -- 小迫@出向中