2016-09-23 6 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?$

関連する問題