多重参照

レベル付き後方参照機能(\k)を実装している最中に、同一名による多重参照の仕様をどうするかで悩んだ。今までの後方参照の場合には、グループ番号の大きいほうから順番にマッチングを試みて、全てマッチしなかったときだけ失敗としている。

/(?<a>.)(?<a>.)\k<a>/.match("xyy")
/(?<a>.)(?<a>.)\k<a>/.match("xyx")

従って、上記の場合には両方ともマッチする。
レベル付き後方参照の場合にも同じ仕様にすると、マッチングに成功しない限りスタックを全て調べていくので効率が気になる。あるグループでマッチングが失敗したときには、それで失敗ということにした。(captureされていないグループは無視して続行する)