0

给定电子邮件列表,格式为:

  "FirstName Last" <email@address.com>, "NewFirst NewLast" <email2@address.com>

如何将其构建为 Only 电子邮件地址的字符串数组(我不需要名称)。

4

3 回答 3

3

PHP 的 Mailparse 扩展有一个您可能想尝试的mailparse_rfc822_parse_addresses功能。否则,您应该构建自己的地址解析器。

于 2009-12-02T15:05:31.227 回答
2

您可以使用preg_match_all文档):

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

假设所有地址都包含在字符串中< ... >,则不需要。explode()$s


编辑响应评论,正则表达式可以重写为'/<([^@]+@[^>]+)>/'. 不过,不确定这是否是故障安全的:)


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

于 2009-12-02T14:57:46.360 回答
1
<?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);
?>
于 2009-12-02T14:53:37.320 回答