我有以下字符串
First Last <first.last@email.com>
我想提取
"first.last"
来自使用正则表达式&amp; amp;的电子邮件字符串PHP。如何解决这个问题?
提前致谢!
答案 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, '<')));