PHP Email Array正则表达式

时间:2009-12-02 14:44:23

标签: php regex email explode

给出一个电子邮件列表,格式化:

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

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

3 个答案:

答案 0 :(得分:3)

PHP’s Mailparse extensionmailparse_rfc822_parse_addresses function您可能想要尝试。否则你应该建立自己的地址解析器。

答案 1 :(得分:2)

您可以使用preg_match_alldocs):

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

如果所有地址都包含在< ... >中,则无需explode()字符串$s


编辑在回复评论时,正则表达式可以重写为'/<([^@]+@[^>]+)>/'。但不确定这是否是故障安全的:)


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

答案 2 :(得分: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);
?>
相关问题