なかだです。

At Tue, 18 Oct 2005 15:21:41 +0900,
とみたまさひろ wrote in [ruby-list:41328]:
> Ruby 1.8.3 で、正規表現で [a-z] を [\x61-x7a] と書くと適合しなくなるみ
> たいです。
> 
> % ruby -e 'p(/^[a-z]+x[0-9]+$/ =~ "hogex111")'
> 0
> % ruby -e 'p(/^[\x61-\x7a]+x[0-9]+$/ =~ "hogex111")'
> nil

キャラクタクラス中に16進や8進表現があると、それに続く繰り返しに
対するバックトラックが禁止されてしまっているようです。

> でも、次のようにすると適合します。
> 
> % ruby -e 'p(/^[\x61-\x7a]+[x][0-9]+$/ =~ "hogex111")'
> 0
> 
> 何故でしょうか?

バグだからでしょう。


Index: regex.c =================================================================== RCS file: /cvs/ruby/src/ruby/Attic/regex.c,v retrieving revision 1.96.2.6 diff -U2 -p -r1.96.2.6 regex.c --- regex.c 10 Jul 2005 23:32:50 -0000 1.96.2.6 +++ regex.c 18 Oct 2005 07:45:14 -0000 @@ -1726,4 +1726,5 @@ re_compile_pattern(pattern, size, bufp) 2 + EXTRACT_UNSIGNED(&b[(1 << BYTEWIDTH) / BYTEWIDTH])*8); b += b[-1] + 2 + EXTRACT_UNSIGNED(&b[(unsigned char)b[-1]])*8; + had_num_literal = 0; break;
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦