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