From: matz@... (Yukihiro Matsumoto) Date: 2003-02-07T15:18:48+09:00 Subject: [ruby-dev:19531] Re: [Oniguruma] Version 1.7.1 まつもと ゆきひろです In message "[ruby-dev:19530] Re: [Oniguruma] Version 1.7.1" on 03/02/07, "K.Kosako" writes: |> |> $ ruby_re -e'p "abcdefABCDEF".scan(/[A-c]/i)' |> ["a", "b", "c", "A", "B", "C"] |> $ ruby -e'p "abcdefABCDEF".scan(/[A-c]/i)' |> ["a", "b", "c", "d", "e", "f", "A", "B", "C", "D", "E", "F"] | |regex.cは、範囲を決定する前に大文字に変換して、 |それから範囲を決定する仕様のように見えます。 その通りです。 |オリジナルregex.c |p "abcdefABCDEF".scan(/[9-C]/i) |#=> ["a", "b", "c", "A", "B", "C"] |p "abcdefABCDEF".scan(/[9-c]/i) |#=> ["a", "b", "c", "A", "B", "C"] | |範囲を決定してから、その範囲に対してignore-caseにする仕様のほうが |良いような気がするのですが、どうでしょうか? /iを指定したということはその正規表現中の大文字小文字の違いに 関しても関心がないであろうということで、現在の仕様になってい ます。先に範囲を決定すると、正規表現中の大文字小文字の違いは 有効だが、マッチ対象文字列の大文字小文字の違いは無視するとい うことになりませんか? まつもと ゆきひろ /:|)