2015-01-20 3 views
0

http://regexr.com/3a8dc왜이 정규 표현식이 전자 메일로 계산되지 않습니까?

개인 작업에 필요한 작은 개인용 유틸리티로 vCard 파일을 구문 분석하려고합니다. 이 예에서는 전자 메일 주소와 일치 시키려고합니다. 파일의 행은 다음과 같습니다

EMAIL;PREF;INTERNET:[email protected] 

내 정규식은 다음과 같습니다

(?:^EMAIL;PREF;INTERNET:)(\[email protected]\w+\.\w+)\n 

내가 잘못 아니에요, 난이 일치하지 않는 그룹과 일치하는 그룹이 있습니다.

(?:^EMAIL;PREF;INTERNET:) 

이 일치하지만 "(?:^EMAIL;PREF;INTERNET:)"다음 두 번째 그룹이 포착해야한다로 시작하는 그룹을 캡처하지 있어야하지 않나요? 나는 전체 라인을 캡쳐하고있다.

+1

정확히 무엇이 캡처인지 이해해야합니다. –

+2

나는 전자 메일 주소를 찾는 정규 표현식을 사용하지 않기를 권고합니다. ':'로 나뉘어서 물건의 모양으로 오른쪽을 잡는 것이 더 쉽고 안전 할 것입니까? – arco444

+0

'? :'를'? <='로 변경하고 마술을 봅니다! – AMDcze

답변

1

일치 검색 및 역방향 캡처를 사용 중입니다. 일치는 패턴이 일치하는 텍스트 전체를 나타내며 캡처 된 부분은 괄호 안에있는 부분을 나타냅니다. 따라서 과 일치하지 않으려면 이메일을 보내십시오. 을 잡으려고 시도하면 이메일을 보냅니다. 귀하의 패턴은 regexr.com이 귀하에게 보여주고있는 전체 라인과 일치합니다. 캡처 된 부분을 검사하면 예상 한 부분이 포함되어 있음을 알 수 있습니다. 당신이 알고있는 경우

^EMAIL;PREF;INTERNET:(\[email protected]\w+\.\w+)\n 

을 만 이메일 주소 이제까지 라벨 것을 다음 것을 :

또한, 당신이 그것을 포착하지 않을거야, 그래서 당신이 사용할 수있는 경우 첫 번째 섹션은 그룹에 대한 필요가 없습니다 아마도 다음과 같이 단축 할 수 있습니다 :

^EMAIL;PREF;INTERNET:(.+)$ 
+0

앵커'^'와'$'는 정규 표현식 엔진과 사용 된 모드에 따라 * 행의 시작과 * 행의 끝을 항상 의미하지는 않습니다. 두 번째 패턴에서'$'는 필요 없다는 것에주의하십시오. –

관련 문제