From: Koji Arai Date: 2001-08-19T03:07:17+09:00 Subject: [ruby-list:30977] Re: why does the /\1/ match "foo" 新井です。 In message "[ruby-list:30975] Re: why does the /\1/ match "foo"" on 19 Aug 2001 02:35:49 +0900, matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > まつもと ゆきひろです > > In message "[ruby-list:30972] why does the /\1/ match "foo"" > on 01/08/19, Koji Arai writes: > > || * regex.c (re_compile_pattern): * \1 .. \9 should be > || backreferences always. > > これは「\6が\006と解釈されないようにする」です。 なるほど、明示的に3桁にすれば文字コードは指定できるのですね p /(a)(b)\1/ =~ "ab\001" # => nil p /(a)(b)\001/ =~ "ab\001" # => 0 以下をマッチさせるにはどうすればいいんでしたっけ? p /(a)(b)\101/ =~ "aba01" こうするしかないのかな? p /(a)(b)(\1)01/ =~ "aba01" => 0 > || * regex.c (re_match): backreferences corresponding to > || unclosed/unmatched parentheses should fail always. > > こっちは「対応する括弧がない、または閉じてないバックリファレ > ンスは失敗とする」です。 もう少し教えてください。 p /(a/ とかは1.6.3でもエラーですよね?こういう意味ではないのですよね? > |で、以下の挙動の違いは上記の変更によるもののようなのですが、 > |なぜこうなったのかも不明です。バグなのではないかと思うのです > |が。。。 > > 後者がかっこの数よりも大きいバックリファレンスについて考慮し > てなかったせいですね。修正します。古い挙動では \1 は \001 と > 解釈されていたので、失敗してました。 了解です。よろしくお願いします。 -- 新井康司 (Koji Arai)