2010-10-07 81 views
5

如果有一個可以處理這個問題,那麼正確的正則表達式模式將從來自電子郵件表單「來自」行的字符串中提取電子郵件地址,它允許地址用逗號「,」,分號「;」,空格或三者的任意組合來分隔。正則表達式還必須能夠忽略「噪聲」文本,例如,地址是否包含在「<」和「>」字符中,或者在電子郵件地址旁邊有實際的名稱。例如,從這個字符串是在到域:正則表達式來解析電子郵件表單「收件人」字段

"Joe Smith" <[email protected]>, [email protected]; [email protected] [email protected] 

模式應該能夠返回以下的比賽: JSMITH @例如,[email protected][email protected],mjane @ gmail.com

我使用PHP,所以如果這不能在單個正則表達式中完成,那麼我肯定會打開其他基於PHP的解決方案。

感謝

+3

使用電子郵件解析庫。沒有必要自己做這個。 (您不是第一個需要解析電子郵件標題的PHP程序員。) – Ether 2010-10-07 21:08:01

回答

6

嘗試

\b[A-Z0-9._%+-][email protected](?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b 

(的RegexBuddy提供)作爲

preg_match_all('/\b[A-Z0-9._%+-][email protected](?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b/i', $subject, $result, PREG_PATTERN_ORDER); 
$result = $result[0]; 

注意/i修改,使其不區分大小寫。

另請參閱this question以瞭解正則表達式在字符串中查找電子郵件地址的缺點。

+3

感謝您在我的電子郵件地址中允許使用'+'......最近我遇到了幾個不允許使用它的註冊表單。真的讓我煩惱。 – mpen 2010-10-07 21:10:57

1

雖然你的問題是特定於正則表達式和Tim給了你很大的答案,爲人們尋找一個簡單的解決方案,看看mailparse_rfc822_parse_addresses頁http://php.net/manual/en/function.mailparse-rfc822-parse-addresses.php

注意,這不是一個標準的PHP函數,需要安裝擴展。經濟型託管解決方案可能不允許您安裝PECL擴展。

相關問題