From: "K.Kosako" Date: 2002-04-02T20:34:22+09:00 Subject: [ruby-dev:16719] Re: [OniGuruma] nested repeat operator Tanaka Akiraさんのから > > 全部の組み合わせを考えた結果、 > > (?:a+)?, (?:a*)??, (?:a+)??の三個が意味のある組み合わせだと思います。 > > (?:a+?)?もありました。 > > ふむ。(?:a+)? は a* と同じでは? うっかりしていました。同じです。 > あと、(?:a*)?? と (?:a+)?? は同じでは? > これは最後の一回が多いぶん (?:a*)?? のほうが効率が悪いという違いはあり > ますけれど。 > > ? が「中身が 0回というのを最後にためす」ものであり、 > ?? が「中身が 0回というのを最初にためす」ものなので、 > * や *? と組み合わせても冗長になるんじゃないかと思います。 > つまり、後の 0回の試行は無駄なわけで、?, ?? を消すか、*, *? を +, +? > に取り替えるか、どちらかによって問題なく効率が上昇することになるんじゃ > ないかというわけです。 そうですね。やっとわかりました。 (?:a*)??は(?:a+)??に自動的に変換するようにします。 自動的に変換するのはこのパターンだけです。 その他はエラーか警告表示するだけです。 -- 小迫@ソフネック 渋谷区恵比寿1-15-1