2010-12-07 14 views
3

バックリファレンスを使用した継承の繰り返しはどのように機能しますか?

(a|b){2}\1 

\1に何を参照するような正規表現を考えると?最初のキャプチャ、最後のキャプチャ、または何?

Regex.IsMatch("aba", @"^(?:(a|b){2}\1)$") == False 
Regex.IsMatch("abb", @"^(?:(a|b){2}\1)$") == True 

は、それが最後キャプチャと一致する疑いがあるために私をリード。私はこの仮定で正しいですか?

答えて

3

あなたは正しく推測しました。 Javaもこれを行います。大部分の(もし全部ではないが)正規表現エンジンは、繰り返されるグループの最後のキャプチャを格納します。

一般的な説明は、http://www.regular-expressions.info/brackets.html#repeatを参照してください。

は、.NETに関する確認のためhttp://msdn.microsoft.com/en-us/library/aa719621%28v=VS.71%29.aspxを参照してください:

「[...]グループには複数のキャプチャを行ったとき、後方参照は、最新のキャプチャを指します。」

関連する問題