2017-02-20 9 views
0

필자의 경우 내용에 emailaddress가 포함될 수 있습니다.표시 이름과 함께 /하지 않고 전자 메일 주소를 얻는 정규식

1. From : [email protected] 
2. From:[email protected] 
3. rom: sdcasdc <[email protected]> 
4. From: "adads" <[email protected]> 
5. From: <[email protected]> 

은 내가

From\s*:\s*((["|']?)[\w|\s]+\2)?\s*(\<?)([\w]([\w\-\.\+\'\/]*)@([\w\-\.]*)(\.[a-zA-Z]{2,22}(\.[a-zA-Z]{2}){0,2}))(\>?) 

모든 형식 내 정규식에 일치하는 노력이

정규식에서 이메일 주소를 위의 패턴 중 하나를 찾아서 추출해야합니다. 하지만 1과 2를 제외하고는 group (4)을 사용하여 정규식에서 전자 메일 주소를 추출합니다.

하지만 1과 2의 경우 전체 전자 메일 주소를 제공하지 않습니다.

내 모든 경우와 일치하도록 정규식을 변경하는 데 도움을주십시오.

+0

캡쳐 그룹이 너무 많아서'(? :'...')'를 자주 사용하십시오. 필요한 경우에만'('...')'을 사용하십시오. 전자 메일 자체를 추출합니다. 그렇지 않으면 매우 혼란스러워집니다. – Xufox

+0

[\ s * : \ s *. *? ([^ "\ n <>] + @ [^"\ n <>] + \. [^ "\ n <>] +)'] (https : //regex101.com/r/L4TdiL/1)이 정상적으로 작동하는 것 같습니다. – Xufox

+1

[전자 메일 주소의 올바른 정규식은 무엇입니까?] 가능한 복제본 (http://stackoverflow.com/questions/450696/what -is-the-the-correct-regular-expression-for-an-email-address) – tripleee

답변

0

정규식에는 실제 전자 메일 주소 앞에 인용되지 않은 이름이 필요합니다. 이미 이메일 주소 또는 인용되지 않은 이름에 속하는지 알지 못해 일부 편지와 일치합니다.

정규식이 너무 복잡하다고 생각합니다. 그것은 단순화 될 수있다. 이 정규식은 다음 경우에 정상적으로 작동하는 것으로 보입니다.

/From\s*:\s*.*?([^"'<>\s][email protected][^"<>\s]+\.[^"'<>\s]+)/gi 

RegEx101 Demo

첫 번째 캡처 그룹이 전자 메일 주소를 제공합니다.

공백이나 다른 구분 기호가 포함되지 않은 @ 기호 앞뒤에 문자를 일치 시키려고 시도합니다. @ 뒤에 TLD가 나타나야합니다.

모든 유효하지 않은 이메일이나 경기 모든 유효한 이메일을 필터링 할 수 있지만, 대부분의 경우 충분합니다.