2011-01-07 199 views
2

電子郵件來處理我的電子郵件地址,可能或者是 $email = "[email protected]";$email="Johnny <[email protected]>" 我想 $handle = "x";的任一版本的$電子郵件。 這怎麼可以在PHP中完成(假設正則表達式)。我不擅長正則表達式。正則表達式獲取從電子郵件地址

在此先感謝

+1

注意(假設你用從「從:」未來的工作電子郵件地址一個完整的PHP解決方案線的RFC2822電子郵件消息或等效消息),在顯示名稱中引用@或s的尖括號是完全可能的。例如:``「Johnny @ home」<[email protected]>` – 2011-01-07 01:42:30

+2

David的權利。下面的答案都不會覆蓋整個有效的電子郵件地址範圍。這是一個相當困難的問題,如果做得對,可能需要一個解析器,而不是正則表達式。但marcog的解決方案將會吸引97%的案例(給與或接受),這可能足以滿足您的需求。 – dkarp 2011-01-07 03:39:25

回答

3

使用正則表達式<?([^<]+?)@然後從$matches[1]得到的結果。

下面是它做什麼:

  • <?相匹配的可選<
  • [^<]+?做了一個或多個不是^<的字符的非貪婪匹配。
  • @與電子郵件地址中的@相匹配。

一個非貪婪的匹配使匹配得到的匹配結果最短。這可以防止跑過@

Rubular:http://www.rubular.com/r/bntNa8YVZt

0

使用這個基本的電子郵件調查正則表達式只是搜索的字符串:\ B [A-Z0-9 ._%+ - ] + @ [A-Z0-9 .-] +。 [AZ] {2,4} \ b 它會匹配任何文本中的任何電子郵件,並且在您的第一個字符串中匹配整個字符串,而在第二個字符串中,只匹配電子郵件字符串的一部分。

要快速學習正則表達式,這是最好的地方:http://www.regular-expressions.info

0
$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])); 

試一下(未測試)

相關問題