正则表达式:如何在“@”符号之前删除电子邮件?

时间:2010-02-24 01:57:03

标签: php regex string

我有以下字符串

First Last <first.last@email.com>

我想提取

"first.last" 

来自使用正则表达式&amp; amp;的电子邮件字符串PHP。如何解决这个问题?

提前致谢!

6 个答案:

答案 0 :(得分:6)

$str ="First Last <first.last@email.com>";
$s = explode("@",$str);
$t = explode("<",$s[0]);
print end($t);

答案 1 :(得分:6)

我知道答案已被接受,但这适用于任何有效的电子邮件地址,格式为:Name <identifier@domain>

// Yes this is a valid email address
$email = 'joey <"joe@work"@example.com>';

echo substr($email, strpos($email,"<")+1, strrpos($email, "@")-strpos($email,"<")-1);
// prints: "joe@work"

大多数其他发布的解决方案都会在许多有效的电子邮件地址上失败。

答案 2 :(得分:3)

这更容易(在检查电子邮件有效后):

$email = 'my.name@domain.com';
$split = explode('@',$email);
$name = $split[0];
echo "$name"; // would echo "my.name"

要检查有效性,您可以这样做:

function isEmail($email) {
    return (preg_match('/[\w\.\-]+@[\w\.\-]+\.\[w\.]/', $email));
}
if (isEmail($email)) { ... }

至于从First Last <first.last@domain.com>中提取电子邮件,

function returnEmail($contact) {
    preg_match('\b[\w\.\-]+@[\w\.\-]+\.\[w\.]\b', $contact, $matches);
    return $matches[0];
}

答案 3 :(得分:2)

你不能只使用拆分功能吗?我不使用PHP,但如果它可用,这似乎会更简单。

答案 4 :(得分:1)

如果这是您将获得的完全格式,那么匹配正则表达式

/<([^@<>]+)@([^@<>]+)>/

会给你举个例子捕获组1中为first.last,捕获组2中为email.com

答案 5 :(得分:0)

无需使用正则表达式;使用一些简单的字符串函数会更有效率。

$string = 'First Last <first.last@email.com>';
$name = trim(substr($string, 0, strpos($string, '<')));