【问题标题】:output value with the same pattern具有相同模式的输出值
【发布时间】:2014-11-10 09:47:31
【问题描述】:

我在 php 中有这段代码:

<?php
    $mails_list = "user1@example.com, User 2 <user2@example.com>, User 3 (user3@example.com)";
    $mails_arr = explode(',', $mails_list);
    foreach($mails_arr as $mail){
        echo "{$mail}<br>";
    }
?>

请注意,使用该代码,他的输出将是:

user1@example.com
User 2 <user2@example.com>
User 3 (user3@example.com)

我不希望那样。我想要的是输出必须是:

user1@example.com
user2@example.com
user3@example.com

我怎样才能用 PHP 做到这一点?

【问题讨论】:

    标签: php arrays output


    【解决方案1】:

    您可以使用preg_match_all() 捕获所有带有正则表达式的电子邮件:

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

    Demo

    【讨论】:

    • @PSantos:很高兴能帮上忙。请注意,如果电子邮件地址包含字母、数字和_ 以外的字符,这将不起作用。修复很简单,只需将所有出现的\w+ 更改为[\w.+&lt;more characters&gt;]+(将&lt;more characters&gt; 替换为电子邮件组件可能包含的任何字符)。
    【解决方案2】:

    给你,

    <?php
    $mails_list = "user1@example.com, User 2 <user2@example.com>, User 3 (user3@example.com)";
    $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>'; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 2019-01-25
      • 2021-05-08
      • 1970-01-01
      • 2012-02-06
      相关资源
      最近更新 更多