新井です。 >>> From: Kazuhiro Nishiyama <nishiyama / mx1.tiki.ne.jp> >>> Date: 14 Nov 1999 23:17:50 +0900 >>> Subject: [ruby-list:18582] Regexp source > こんばんは、ZnZです。 > > 正規表現をテキストファイルに保存するのにsourceだとまずいのでしょうか? > 以下のようにどんどん長くなっていってしまいます。 なんかバグっぽいですね。でしゃばってパッチ作りました。 --- re.c.org Sat Oct 16 00:02:56 1999 +++ re.c Mon Nov 15 04:50:33 1999 @@ -260,10 +260,7 @@ rb_reg_source(re) VALUE re; { - VALUE str = rb_str_new(0,0); - rb_reg_expr_str(str, RREGEXP(re)->str,RREGEXP(re)->len); - - return str; + return rb_str_new(RREGEXP(re)->str,RREGEXP(re)->len); } static VALUE > また/#{a}/の結果がRegexp.new(a)の結果と違います。 > 変数をa,b,c,dと順番に変えていったときはRegexp.newと同じ結果になりました。 > なぜなのでしょうか? これは単に使う変数を間違えてます、、よね? > p a = '[/]' # "[/]" > p b = /#{a}/ # /[\/]/ > p b === '\\' # nil > > p a = b.source # "[\\/]" > p b = /#{a}/ # /[\\/]/ > p a === '\\' # nil <- b === > > p a = b.source # "[\\\\/]" > p b = /#{a}/ # /[\\\/]/ > p a === '\\' # false <- b === > > p a = b.source # "[\\\\\\/]" > p b = /#{a}/ # /[\\\\/]/ > p a === '\\' # false <- b === > > p a = '[/]' # "[/]" > p b = Regexp.new(a) # /[\/]/ > p b === '\\' # nil > > p a = b.source # "[\\/]" > p b = Regexp.new(a) # /[\\/]/ > p b === '\\' # nil > > p a = b.source # "[\\\\/]" > p b = Regexp.new(a) # /[\\\/]/ > p b === '\\' # 0 > > p a = b.source # "[\\\\\\/]" > p b = Regexp.new(a) # /[\\\\/]/ > p b === '\\' # 0 -- 新井康司 (Koji Arai)