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。2 番目のフレーズを削除する方法はありますか?

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 に答える
1
<?php
$str = '"test1@test1.com" <test1@test1.com>';
$str= preg_replace("(<.*>+)", "", $str);
print $str;
?>
于 2013-09-27T08:04:58.943 に答える
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 に答える
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 に答える
0

もしも

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

あなたが使用することができます:

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

(編集)

于 2013-09-27T08:05:51.020 に答える