UTF8で\dが全角数字にマッチ

irb:0> /\d/ =~ "5"
=> 0
irb:0> /\d/.encoding
=> #<Encoding:US-ASCII>
irb:0> /\d/n.encoding
=> #<Encoding:US-ASCII>
irb:0> re = Regexp.new(/\d/.source.force_encoding(Encoding::ASCII_8BIT))
=> /\d/
irb:0> re.encoding
=> #<Encoding:US-ASCII>

ぎゃーす.

irb:0> /\d(?:\x80(?!))?/n =~ "5".force_encoding(Encoding::ASCII_8BIT)
=> 0
irb:0> /\d(?:\x80(?!))?/n =~ "5".force_encoding(Encoding::ASCII_8BIT)
=> nil

いや,俺がしたいのはこうじゃないんだ.そもそもASCII_8BITは困る.
\wや\sもUnicodeかそうでないかで挙動が変わるらしいから要注意だ!


参考URL:
http://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt