2016-09-23 115 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。否則,使用lookarounds。 –

+0

我沒有得到這個正則表達式的任何結果 –

+0

那麼爲什麼它不**捕獲'<'但仍然捕獲'>'。他們應該是不捕獲的...... @WiktorStribiżew –

回答

3

這個問題並不是因爲最後一個非捕獲組,而是行結束。如果您在最後處理換行,則不會捕獲>。

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

如果您不需要捕捉某些部分,你可以省略括號。您不必越過<' & "個字符。

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