2016-09-23 2 views
2

를 캡처 나는 다음과 같은 정규 표현식이 있습니다내 정규 표현식은 여전히 ​​비 캡처 그룹

(?:^(?:X-Rcpt-To|X-MDRcpt-To|To): (?:[\<\'\"])?(.*?)(?:[\>\'\"])?$)

그리고 텍스트의 다음 블록을 :

To: <[email protected]>

그것은 이메일을 캡처 여기에 있어야합니다 : https://regex101.com/r/gQ1bV5/1

그러나 이것을 구현하면 내 코드, 여전히 이메일 주소 끝에 > 등을 캡처합니다. (돌아 오는 [email protected]>)

public string FindRealEmail() 
{ 
    var filterRegex = new Regex("(?:^(?:X-Rcpt-To|X-MDRcpt-To|To): (?:[\\<\\\'\\\"])?(.*?)(?:[\\>\\\'\\\"])?$)", RegexOptions.Multiline); 
    var email = (filterRegex.IsMatch(Body) ? filterRegex.Match(Body).Groups[1].Value : EmailAddress).Replace("\r", ""); 
    return email; 
} 
+0

비 캡처 그룹은 여전히 ​​경기의 pstt을 구성합니다. 그렇지 않으면 둘러보기를 사용하십시오. –

+0

이 정규식으로 어떤 결과도 얻지 못했습니다. –

+0

그렇다면 왜''''을 캡처하지 않고'>'을 캡처하는 이유는 무엇입니까? 그들은 캡처하지 않기로되어 있습니다 ... @ WiktorStribiżew –

답변

3

문제는 실제로 마지막 비 캡처 그룹 때문이 아니라 줄 끝입니다. 끝에 줄 바꿈을 처리하면>가 캡처되지 않습니다. 특정 부분을 캡처 할 필요가없는 경우

(?:^(?:X-Rcpt-To|X-MDRcpt-To|To): (?:[\<\'\"])?(.*?)(?:[\>\'\"])?\r?$)

, 당신은 괄호를 생략 할 수 있습니다. <, ' & " 문자 중 하나를 탈출 할 필요가 없습니다.

^(?:X-Rcpt-To|X-MDRcpt-To|To): [<'"]?(.*?)[>'"]?\r?$