0

我有一个这样的字符串:

..., "test1@test1.com" <test1@test1.com>, "test2@test2.com" <test2@test2.com>, "test3@test3.com", "test4@test4.com" <test4@test4.com>, ....

我正在爆炸所有内容,,但问题是我不想拥有像这样的价值, [0] => "test1@test1.com" <test1@test1.com>我需要删除那些<..>括号中的电子邮件。

所以结果应该是这样的[0] => test1@test1.com。任何提供如何删除第二个短语?

4

8 回答 8

4

您可以使用专门为此类电子邮件地址列表量身定制的功能,例如imap_rfc822_parse_adrlist. 映射它并提取您需要的信息可能已经完成了:

$list     = ""test1@test1.com" <test1@test1.com>, "test2@test2.com" <test2@test2.com>, "test3@test3.com", "test4@test4.com" <test4@test4.com>";
$adresses = array_map(function($entry) {
    return sprintf('%s@%s', $val->mailbox, $val->host);
}, imap_rfc822_parse_adrlist($list, ""));

这样做的好处是它可以正确处理您前面引用的可打印文本 - 正确完成并非易事(真的)。

于 2013-09-27T08:10:13.273 回答
2

这里最简单的方法 - 使用 strip_tags 函数(见strip_tags 描述

于 2013-09-27T08:03:03.973 回答
1

使用正则表达式将 <...> 之间的任何内容替换为空字符串,然后将修改后的字符串分解为一个数组。

于 2013-09-27T08:02:28.970 回答
1
<?php
$str = '"test1@test1.com" <test1@test1.com>';
$str= preg_replace("(<.*>+)", "", $str);
print $str;
?>
于 2013-09-27T08:04:58.943 回答
1

最简单的方法是使用preg_match

preg_match('(<.*>+)', $your_emails, $matches);

print_r($matches); // array of zero or more matches depending on input
于 2013-09-27T08:08:59.753 回答
1

您可以将文本分解成一个数组,然后运行一个array_map清理文本的函数。像这样的东西:

function clean($t){
    //Use regexp to replace desired text
    return preg_replace('/<[^>]*>/', '', $t);
}    

$text = '"test1@test1.com" <test1@test1.com>, "test2@test2.com" <test2@test2.com>, "test3@test3.com", "test4@test4.com" <test4@test4.com>';
$a = explode(',', $text);
var_dump($a);


$b = array_map("clean", $a);
var_dump($b);
于 2013-09-27T08:09:58.077 回答
0

如果

$yourString='"test1@test1.com" <test1@test1.com>';

您可以使用:

$yourString=substr($yourString,1,strpos($yourString,'<')-3);

(已编辑)

于 2013-09-27T08:05:51.020 回答
0

这是一行代码:

array_map(function($a){ return trim($a, ' "'); }, explode(',', strip_tags($string)));

和整个:

<?php
$string = <<<TK
"test1@test1.com" <test1@test1.com>, "test2@test2.com" <test2@test2.com>, "test3@test3.com", "test4@test4.com" <test4@test4.com>
TK;
$result = array_map(
            function($a){
                return trim($a, ' "');
            },
            explode(',', strip_tags($string))
    );
var_dump($result);

输出:

array(4) {
  [0]=>
  string(15) "test1@test1.com"
  [1]=>
  string(15) "test2@test2.com"
  [2]=>
  string(15) "test3@test3.com"
  [3]=>
  string(15) "test4@test4.com"
}
于 2013-09-27T08:23:18.033 回答