From: "ohai (Ippei Obayashi)" Date: 2013-06-30T16:35:33+09:00 Subject: [ruby-dev:47471] [ruby-trunk - Bug #8583][Open] A problem of condition regexp with a named capture Issue #8583 has been reported by ohai (Ippei Obayashi). ---------------------------------------- Bug #8583: A problem of condition regexp with a named capture https://bugs.ruby-lang.org/issues/8583 Author: ohai (Ippei Obayashi) Status: Open Priority: Normal Assignee: Category: Target version: current: 2.1.0 ruby -v: ruby 2.1.0dev (2013-06-30 trunk 41711) [x86_64-linux] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN 以下の条件分岐を含む正規表現は "xy" "yx" にマッチし、"xx" "yy" にはマッチしません。 /\A((x)|(y))(?(2)y|x)\z/ 名前付きキャプチャを用いた以下の正規表現も同じ挙動をするはずですが、そうはなっていません。 /\A((?x)|(?y))(?()y|x)\z/ # "xx" "yy" にマッチして "xy" "yx" にはマッチしない。 2.0.0-p247, trunk の両方で確認しました。 この問題について調べた所、 名前付きキャプチャを使うときキャプチャの番号をrenumberしている 所で renumber がもれています。 添付したパッチのように修正すれば直ると思います。 -- http://bugs.ruby-lang.org/