2011-04-21 3 views
1

글쎄, 나는 한 동안 좋은 성적으로 정규 표현식을 사용 해왔다. 그러나 나는 걸림돌에 빠졌다.바보 RegEx 혼돈

나는 구별 할 싶습니다 두 개의 문자열 패턴이 있습니다

AAA(CR)(LF)* 

AAA BBBBB(CR)(LF)* 
A가 문자입니다

가, B는 (CR)/(LF)를 제외한 모든 문자가 될 수 있으며, (CR)을/(LF)은 캐리지 리턴 및 줄 바꿈입니다 (예 : 0h0D/0h0A).

나는 다음과 같은 패턴을 시도했다 :

"[A-Z ]+.+\x0D\x0A\*" 

그러나, aggravatingly이 위의 패턴이 모두 일치! .+ 첫 번째 패턴이 일치하지 않아야합니까? 내가 이해하는 한, +의 욕심 많은 일치입니다. 하나 이상의 이전 토큰 ... 어디서 잘못 되었나요?

감사합니다,
브라이언 처음 문자 [A-Z ]+ 일치하고 세 번째 A는 .+과 일치하므로

+2

. 당신의 설명이 당신의 모범과 일치하지 않을 때 당신이 무엇인지 이해하는 것은 어렵습니다. 두 개의 샘플 입력에서 하나는 공백이 있고 다른 하나는 공백이 아닙니다. 이것이 당신을 구분할 수있는 방법입니다. –

답변

4

귀하의 정규식 AAA(CR)(LF) 일치합니다. +는 욕심 일치를 나타내고 있지만

, 정규식 엔진은 AAA을 발견하고 표현의 나머지 부분은 일치하지 않을 수 있다는 것을 발견 한 후를 역 추적 할 것이다. 따라서 AA으로 시도하면 나머지 문자열 일치 찾습니다. 당신의 설명이 공백 문자를 언급하지 않는다, 그러나 당신이 당신에게 당신의 정규 표현식을 포함에서

1

내가 오해하지 않는 한 ...

"[A-Z]+\x0D\x0A\*" 

또는

"[A-Z]+ .+\x0D\x0A\*"