Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.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电子邮件数组正则表达式_Php_Regex_Email_Explode - Fatal编程技术网

PHP电子邮件数组正则表达式

PHP电子邮件数组正则表达式,php,regex,email,explode,Php,Regex,Email,Explode,给出电子邮件列表,格式如下: "FirstName Last" <email@address.com>, "NewFirst NewLast" <email2@address.com> “FirstName Last”、“NewFirst NewLast” 如何将其构建到仅包含电子邮件地址的字符串数组中(我不需要名称)。 您可以使用preg\u match\u all(): preg_match_all('/]+)>/,$s,$matches); 打印($matc

给出电子邮件列表,格式如下:

  "FirstName Last" <email@address.com>, "NewFirst NewLast" <email2@address.com>
“FirstName Last”、“NewFirst NewLast”
如何将其构建到仅包含电子邮件地址的字符串数组中(我不需要名称)。



您可以使用
preg\u match\u all
():

preg_match_all('/]+)>/,$s,$matches);
打印($matches);//检查生成的数组
前提是所有地址都包含在
<…>
不需要
分解()
字符串
$s


编辑响应注释,正则表达式可以重写为
'/]+)>/'
。但不确定这是否是故障安全的:)



编辑#2对任何非琐碎数据使用解析器(请参阅下面的评论-电子邮件地址解析是一个难题)。但是,可以通过删除重复地址来防止某些错误。

您可以使用
preg\u match\u all
():

preg_match_all('/]+)>/,$s,$matches);
打印($matches);//检查生成的数组
前提是所有地址都包含在
<…>
不需要
分解()
字符串
$s


编辑响应注释,正则表达式可以重写为
'/]+)>/'
。但不确定这是否是故障安全的:)




编辑#2对任何非琐碎数据使用解析器(请参阅下面的评论-电子邮件地址解析是一个难题)。但是,可以通过删除重复的地址来防止某些错误。

有一个您可能想尝试的方法。否则,您应该构建自己的地址解析器。

有一个您可能想尝试的解决方案。否则,您应该构建自己的地址解析器。

不要使用正则表达式,请使用解析器。感谢各位,您为我指明了正确的方向。不要使用正则表达式,请使用解析器。感谢各位,您为我指明了正确的方向。当然,这在电子邮件地址上失败,如
“>”@example.com
。电子邮件不是很棒吗?并不是说这种说法在实践中不适用于每封电子邮件,理论上它是错误的+1.无论如何,如果引用的显示名称包含
?您的故障保护在理论上仍然失败:
“@>”@example.com
电子邮件糟透了。尽管如此,我还是喜欢你在这方面的努力。使用正则表达式无法完全解析电子邮件。至少不是很简单。我相信有一个大概有几百个字符的字符可以完成这个任务。原来是几千个字符。现在,
将产生两个地址。@Gumbo在这种情况下(即名称可以包含
<…@…>
),您应该使用解析器:),当然,这在电子邮件地址上失败,如
“>”@example.com
。电子邮件不是很棒吗?并不是说这种说法在实践中不适用于每封电子邮件,理论上它是错误的+1.无论如何,如果引用的显示名称包含
?您的故障保护在理论上仍然失败:
“@>”@example.com
电子邮件糟透了。尽管如此,我还是喜欢你在这方面的努力。使用正则表达式无法完全解析电子邮件。至少不是很简单。我相信有一个大概有几百个字符的字符可以完成这个任务。原来是几千个字符。现在,
将产生两个地址。@Gumbo在这种情况下(即名称可以包含
<…@…>
),您应该使用解析器:)如果引用的显示名称包含逗号怎么办?如果引用的显示名称包含逗号怎么办?+1重新发明轮子=坏。使用正则表达式重新发明轮子=更糟。+1我被正则表达式方法迷住了。这似乎就是实现它的方法。或者,正如在这个函数注释中读到的,您可以使用这个PEAR包:+1 Reinventing the wheel=bad。使用正则表达式重新发明轮子=更糟。+1我被正则表达式方法迷住了。这似乎是实现此目的的方法。或者,如本函数注释中所述,您可以使用此PEAR包:
<?php

 $s = "\"FirstName Last\" <email@address.com>, \"NewFirst NewLast\" <email2@address.com>";

 $emails = array();
 foreach (split(",", $s) as $full)
 {
  preg_match("/.*<([^>]+)/", $full, $email);
  $emails[] = $email[1];
 }

 print_r($emails);
?>
preg_match_all('/<([^>]+)>/', $s, $matches);
print_r($matches); // inspect the resulting array