From: "usa (Usaku NAKAMURA)" Date: 2013-07-01T13:34:24+09:00 Subject: [ruby-dev:47475] [ruby-trunk - Bug #8583] A problem of condition regexp with a named capture Issue #8583 has been updated by usa (Usaku NAKAMURA). Backport changed from 1.9.3: UNKNOWN, 2.0.0: REQUIRED to 1.9.3: DONTNEED, 2.0.0: REQUIRED ---------------------------------------- Bug #8583: A problem of condition regexp with a named capture https://bugs.ruby-lang.org/issues/8583#change-40221 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: DONTNEED, 2.0.0: REQUIRED 以下の条件分岐を含む正規表現は "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/