From: kkosako@... Date: 2003-05-19T16:41:23+09:00 Subject: [ruby-dev:20215] Re: /()*\1/ =~ "" > -----Original Message----- > From: Tanaka Akira [mailto:akr@m17n.org] > ... > 最初、私は 2回以上マッチしても意味がないんじゃないかなぁと思って、まず > 1回を試して次に 0回を試せばいいんじゃないかと思ったんですが、考えてみ > るとこれでもうまくいかないケースがあります。 > > たとえば、 > /(?:()|()|()|()|()|())*\2\5/ =~ "" > というのを考えると、これは 2回(以上)マッチしてどこかで 2つめと 5つめを > (順不同で)通るようなのを見つけないといけません。 > > # これは鬼車でもマッチしません、が、perl 5.6.1 はマッチします。 > > さらに、/(?:()|()|()|(x)|()|())*\2b\5/ =~ "x" なんてのも考えられて、こ > れは 3回(以上)マッチして、2つめ、4つめ、5つめを通らないといけません。 こういう場合があるんですね。考えていませんでした。 選択肢の数だけの繰り返しは、必ず試すように変更すれば良いような気がしますが、 それだけでどのようなパターンにも対応できるのか、わかりません。 誰か教えてください。 対処方法があっても、速度的な不利が大きすぎる場合は 放置するかもしれませんが。 -- 小迫@出向中