2013-04-29 3 views
4

특정 문자 세트 또는 EOL까지 모든 것을 일치시키는 방법은 무엇입니까?줄 끝 맞추는 방법?

[=]+.*?[()|$]

경기 : ==test)

가 일치하지 않습니다 ==test

왜 라인 정규식 앵커 $의 끝이 제 2 문에 대해 고려되지 않는 이유는 무엇입니까?

+0

'Pattern.MULTILINE'을 사용하면'(? : [()] | $)'는 대괄호 나 줄 끝과 일치합니다. – MikeM

답변

5

실제로 문자가 아니기 때문에 줄 끝은 문자 클래스에서 작동하지 않습니다. 그것은 제로 너비 어설 션입니다 (문자열의 현재 지점에서 조건을 테스트하지만 실제로 문자를 먹지는 않습니다).

(?:otherstuffhere|$)으로 테스트하십시오.

참고 : 일치하는 하위 그룹과 문자 클래스를 혼동하는 것처럼 보입니다. 문자 클래스 [...]은 대괄호 안에있는 한 문자와 일치합니다. [a|bc]a, |, b 또는 c 중 하나와 일치합니다. 일치하는 하위 그룹은 여러 개의 표현식을 원하는 것입니다. (...)은 캡처가 가능한 하위 그룹입니다. (?:...)은 캡처가없는 일치하는 하위 그룹입니다.

$의 일치 동작은 설정에 따라 여러 줄의 문자열이 다를 수 있습니다. 각 행의 끝 또는 문자열의 끝과 일치 할 수 있습니다.

\z항상은 사용하는 설정에 관계없이 문자열 끝에 만 일치합니다. \Z은 문자열의 끝에 일치하거나 맨 끝에있는 개행 직전과 일치합니다.

+0

좋아요, 그래서 내 경험치는 다음과 같이 평가할 겁니다.'(? : [()] | \ z)' – membersound