Regex从电子邮件地址获取电子邮件句柄

时间:2011-01-07 01:11:28

标签: php regex email

我有一个可以的电子邮件地址 $email = "x@example.com";$email="Johnny <x@example.com>" 我想得到 {$ 1}}用于$ email的任一版本。 如何在PHP中完成(假设正则表达式)。我不是很擅长正则表达式。

提前致谢

4 个答案:

答案 0 :(得分:3)

使用正则表达式<?([^<]+?)@,然后从$matches[1]获取结果。

以下是它的作用:

  • <?匹配可选的<
  • [^<]+?对一个或多个不是^<的字符进行非贪婪匹配。
  • @与电子邮件地址中的@相匹配。

非贪婪匹配使得结果匹配成为正则表达式匹配所需的最短匹配。这可以防止超越@

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

答案 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]));

试试(未经测试)