выходное значение с тем же шаблоном

0

У меня есть этот код в 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?

Теги:
arrays
output

2 ответа

2
Лучший ответ

Вы можете использовать preg_match_all() для захвата всех писем с помощью регулярного выражения:

preg_match_all('/[<(]?(\w+@\w+\.\w+)[>)]?/', $mails_list, $matches);
echo implode("\n", $matches[1]);

демонстрация

  • 0
    Большое спасибо ... Это работает
  • 0
    @PSantos: рад, что помог. Обратите внимание, что это не будет работать, если адреса электронной почты содержат символы, отличные от букв, цифр и _ . Исправить это легко, просто замените все вхождения \w+ на [\w.+<more characters>]+ (замените <more characters> теми символами, которые могут содержаться в компонентах электронной почты).
2

Ну вот,

<?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>'; }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню