2010-12-07 2 views
3

역 참조가있는 분리 된 분리 기호는 어떻게 작동합니까?

(a|b){2}\1 

무엇 \1를 참조합니다 같은 정규식을 감안할 때? 첫 번째 캡처, 마지막 캡처 또는 무엇?

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

그것이 마지막 캡처 일치 의심 날 리드. 나는이 가정에서 맞습니까?

답변

3

당신은 옳은 것 같았습니다. 자바도이 작업을 수행합니다. 대부분의 (모든 경우는 아닐지라도) regex 엔진은 반복 된 그룹에 대한 마지막 캡처를 저장합니다.

일반적인 설명은 http://www.regular-expressions.info/brackets.html#repeat을 참조하십시오.

". [...] 그룹이 여러 캡처을 할 때, 역 참조가 가장 최근의 캡처를 의미한다"

닷넷에 대한 확인을 http://msdn.microsoft.com/en-us/library/aa719621%28v=VS.71%29.aspx를 참조하십시오