正则表达式获取从电子邮件地址
问题描述:
电子邮件来处理我的电子邮件地址,可能或者是 $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”` – 2011-01-07 01:42:30
David的权利。下面的答案都不会覆盖整个有效的电子邮件地址范围。这是一个相当困难的问题,如果做得对,可能需要一个解析器,而不是正则表达式。但marcog的解决方案将会吸引97%的案例(给与或接受),这可能足以满足您的需求。 – dkarp 2011-01-07 03:39:25