PHP Email Array Регулярное выражение - PullRequest
0 голосов
/ 02 декабря 2009

Приведен список электронных писем, отформатированных:

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

Как я могу встроить это в массив строк только адресов электронной почты (мне не нужны имена).

Ответы [ 3 ]

3 голосов
/ 02 декабря 2009

Расширение PHP Mailparse имеет mailparse_rfc822_parse_addresses функцию , которую вы можете попробовать. В противном случае вы должны создать свой собственный анализатор адресов.

2 голосов
/ 02 декабря 2009

Вы можете использовать preg_match_all ( документы ):

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

При условии, что все адреса заключены в < ... >, нет необходимости explode() в строке $s.


РЕДАКТИРОВАТЬ В ответ на комментарии, регулярное выражение может быть переписано как '/<([^@]+@[^>]+)>/'. Не уверен, что это отказоустойчиво, хотя:)


РЕДАКТИРОВАТЬ # 2 Используйте синтаксический анализатор для любых нетривиальных данных (см. Комментарии ниже - разбор адресов электронной почты - сука) Однако некоторые ошибки можно предотвратить, удалив дублирующиеся адреса.

1 голос
/ 02 декабря 2009
<?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);
?>
...