電子郵件來處理我的電子郵件地址,可能或者是 $email = "[email protected]";
或$email="Johnny <[email protected]>"
我想 $handle = "x";
的任一版本的$電子郵件。 這怎麼可以在PHP中完成(假設正則表達式)。我不擅長正則表達式。正則表達式獲取從電子郵件地址
在此先感謝
電子郵件來處理我的電子郵件地址,可能或者是 $email = "[email protected]";
或$email="Johnny <[email protected]>"
我想 $handle = "x";
的任一版本的$電子郵件。 這怎麼可以在PHP中完成(假設正則表達式)。我不擅長正則表達式。正則表達式獲取從電子郵件地址
在此先感謝
使用正則表達式<?([^<]+?)@
然後從$matches[1]
得到的結果。
下面是它做什麼:
<?
相匹配的可選<
。[^<]+?
做了一個或多個不是^
或<
的字符的非貪婪匹配。@
與電子郵件地址中的@
相匹配。一個非貪婪的匹配使匹配得到的匹配結果最短。這可以防止跑過@
。
使用這個基本的電子郵件調查正則表達式只是搜索的字符串:\ B [A-Z0-9 ._%+ - ] + @ [A-Z0-9 .-] +。 [AZ] {2,4} \ b 它會匹配任何文本中的任何電子郵件,並且在您的第一個字符串中匹配整個字符串,而在第二個字符串中,只匹配電子郵件字符串的一部分。
要快速學習正則表達式,這是最好的地方:http://www.regular-expressions.info
$email = '[email protected]';
preg_match('/([a-zA-Z0-9\-\._\+][email protected][a-z0-9A-Z\-\._]+\.[a-zA-Z]+)/', $email, $regex);
$handle = array_shift(explode('@', $regex[1]));
試一下(未測試)
這是基於marcog的回答
function extract_email($email_string) {
preg_match("/<?([^<]+?)@([^>]+?)>?$/", $email_string, $matches);
return $matches[1] . "@" . $matches[2];
}
echo extract_email("[email protected]"); // outputs [email protected]
echo extract_email("Ice Cream Bob <[email protected]>"); // outputs [email protected]
注意(假設你用從「從:」未來的工作電子郵件地址一個完整的PHP解決方案線的RFC2822電子郵件消息或等效消息),在顯示名稱中引用@或s的尖括號是完全可能的。例如:``「Johnny @ home」<[email protected]>` – 2011-01-07 01:42:30
David的權利。下面的答案都不會覆蓋整個有效的電子郵件地址範圍。這是一個相當困難的問題,如果做得對,可能需要一個解析器,而不是正則表達式。但marcog的解決方案將會吸引97%的案例(給與或接受),這可能足以滿足您的需求。 – dkarp 2011-01-07 03:39:25