题
给定一个电子邮件列表,格式为:
"FirstName Last" <email@address.com>, "NewFirst NewLast" <email2@address.com>
如何将其构建为仅包含电子邮件地址的字符串数组(我不需要名称)。
解决方案
PHP 的 Mailparse 扩展 有一个 mailparse_rfc822_parse_addresses
功能 你可能想尝试一下。否则,您应该构建自己的地址解析器。
其他提示
您可以使用preg_match_all
(文档):
preg_match_all('/<([^>]+)>/', $s, $matches);
print_r($matches); // inspect the resulting array
所提供的所有地址被包围在< ... >
没有必要explode()
字符串$s
。
修改强>响应于评论,正则表达式可以改写为'/<([^@]+@[^>]+)>/'
。不知道这是否是万无一失,但:)
修改#2 使用用于解析器的任何非平凡的数据(见下面的评论 - 电子邮件地址的解析是母狗)。能,但是,通过除去重复的地址可以防止一些错误。
<?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);
?>
不隶属于 StackOverflow