我有一个可以的电子邮件地址
$email = "x@example.com";
或$email="Johnny <x@example.com>"
我想得到
{$ 1}}用于$ email的任一版本。
如何在PHP中完成(假设正则表达式)。我不是很擅长正则表达式。
提前致谢
答案 0 :(得分:3)
使用正则表达式<?([^<]+?)@
,然后从$matches[1]
获取结果。
以下是它的作用:
<?
匹配可选的<
。[^<]+?
对一个或多个不是^
或<
的字符进行非贪婪匹配。@
与电子邮件地址中的@
相匹配。非贪婪匹配使得结果匹配成为正则表达式匹配所需的最短匹配。这可以防止超越@
。
答案 1 :(得分:2)
这是一个基于marcog答案的完整PHP解决方案
function extract_email($email_string) {
preg_match("/<?([^<]+?)@([^>]+?)>?$/", $email_string, $matches);
return $matches[1] . "@" . $matches[2];
}
echo extract_email("ice.cream.bob@gmail.com"); // outputs ice.cream.bob@gmail.com
echo extract_email("Ice Cream Bob <ice.cream.bob@gmail.com>"); // outputs ice.cream.bob@gmail.com
答案 2 :(得分:0)
使用此基本电子邮件查找正则表达式搜索字符串:\ b [A-Z0-9 ._%+ - ] + @ [A-Z0-9 .-] +。[AZ] {2,4} \ b 它将匹配任何文本中的任何电子邮件,并且在您的第一个字符串中它将匹配整个字符串,在第二个字符串中,只匹配电子邮件的字符串部分。
要快速学习正则表达式,这是最好的地方:http://www.regular-expressions.info
答案 3 :(得分:0)
$email = 'x@gmail.com';
preg_match('/([a-zA-Z0-9\-\._\+]+@[a-z0-9A-Z\-\._]+\.[a-zA-Z]+)/', $email, $regex);
$handle = array_shift(explode('@', $regex[1]));
试试(未经测试)