2010-12-07 8 views
1
Regex.IsMatch("ab", @"^(?:(a)|\1b)$") == False 

그래서 그 다음 $ 실패에 맞게하려고, 그래서 백 트럭과 \1로 시작하는, 다른 분리 된 시도, 성공, a 일치하도록 시도합니다. 나는 그것이 "A"라고 치면 \1 값을 "a"라고 생각하지만, 그 값을 잊었다는 것을 되돌려 야했기 때문에 지금은? 그것은 그것이 작동하는 방법인가? 그리고 \1은 그 시점 이후에 아무것도 일치하지 않을 것입니까?왜이 정규식이 일치하지 않습니까?

+0

일치하는 것을 알려주는 것이 더 좋을 수도 있습니다. –

+0

@ Jason : Nothing. 그들이 어떻게 작동하는지 이해하려고 노력했습니다 ... 깊이 있습니다. – mpen

답변

4

정규 표현식의 역 참조는 항상 과 일치하는 현재과 일치합니다. 일관성 문제입니다. 일치하지 않는 문자열 섹션은 일치하는 엔진의 상태를 오염시키지 않아 위양성을 유발할 수 있습니다.

그렇습니다. \1 역 참조는 대체 연산자의 다른쪽에 있으므로 해당하는 캡처 그룹도 절대 일치하지 않으므로 아무 것도 (빈 문자열조차도) 일치하지 않습니다.

관련 문제