Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Regex从电子邮件地址获取电子邮件句柄_Php_Regex_Email - Fatal编程技术网

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

Php Regex从电子邮件地址获取电子邮件句柄,php,regex,email,Php,Regex,Email,我有一个电子邮件地址,可以是 $email=”x@example.com";或$email=“Johnny” 我想去 $handle=“x”适用于$email的任一版本。 如何在PHP中实现这一点(假设使用正则表达式)。我不太擅长正则表达式 提前感谢只需使用这个基本的电子邮件查找正则表达式搜索字符串:\b[A-Z0-9.%+-]+@[A-Z0-9.-]+[A-Z]{2,4}\b 它将匹配任何文本中的任何电子邮件,在第一个字符串中,它将匹配整个字符串,在第二个字符串中,仅匹配字符串中的电子邮件部分

我有一个电子邮件地址,可以是
$email=”x@example.com";
$email=“Johnny”
我想去
$handle=“x”适用于$email的任一版本。
如何在PHP中实现这一点(假设使用正则表达式)。我不太擅长正则表达式


提前感谢

只需使用这个基本的电子邮件查找正则表达式搜索字符串:\b[A-Z0-9.%+-]+@[A-Z0-9.-]+[A-Z]{2,4}\b 它将匹配任何文本中的任何电子邮件,在第一个字符串中,它将匹配整个字符串,在第二个字符串中,仅匹配字符串中的电子邮件部分

要快速学习regexp,这里是最好的地方:


尝试一下(未测试)

使用regex
这里是一个基于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
函数提取电子邮件($email\u字符串){

preg_match(“/将电子邮件地址与正则表达式正确匹配要困难得多。(例如,并非所有顶级域名都有2-4个字符长,并且该正则表达式不允许在地址的本地部分使用许多有效字符。)许多其他类似问题,如(假设您正在使用的电子邮件地址来自RFC2822邮件消息的“发件人:”行或等效行),则完全可能在显示名称中引用带有@或尖括号的地址。例如:
“Johnny@home”“
David是对的。下面的答案都不能涵盖所有有效的电子邮件地址。这是一个相当困难的问题,正确地解决这个问题可能需要一个解析器,而不是正则表达式。但是marcog的解决方案可以解决大约97%的情况(给定或接受),这可能足以满足您的需要。这确实不是问题,但感谢您指出这一点。Username@myservice.com将是电子邮件,如果有什么奇怪的事情,我们就把它扔掉。
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