У меня есть этот код в php:
<?php
$mails_list = "[email protected], User 2 <[email protected]>, User 3 ([email protected])";
$mails_arr = explode(',', $mails_list);
foreach($mails_arr as $mail){
echo "{$mail}<br>";
}
?>
Обратите внимание, что с этим кодом он выводит:
[email protected]
User 2 <[email protected]>
User 3 ([email protected])
И я этого не хочу. Я хочу, чтобы выход был следующим:
[email protected]
[email protected]
[email protected]
Как я могу это сделать с PHP?
Вы можете использовать preg_match_all()
для захвата всех писем с помощью регулярного выражения:
preg_match_all('/[<(]?(\w+@\w+\.\w+)[>)]?/', $mails_list, $matches);
echo implode("\n", $matches[1]);
Ну вот,
<?php
$mails_list = "[email protected], User 2 <[email protected]>, User 3 ([email protected])";
$mails_arr = explode(',', $mails_list);
preg_match_all('/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}/i', $mails_list, $found_mails);
foreach ($found_mails[0] as $each) { echo $each.'<br>'; }
_
. Исправить это легко, просто замените все вхождения\w+
на[\w.+<more characters>]+
(замените<more characters>
теми символами, которые могут содержаться в компонентах электронной почты).