1

私は次の文字列を持っています:

「ジョニーテスト」 <johnny@test.com>、ジャック<another@test.com>、「スコットサマーズ」 <scotts@test.com>..。

複数の単語の名前は二重引用符で囲まれています

次の結果を含む配列が必要です。

array(   
   array('nom' => 'Johnny Test', 'adresse' => 'johnny@test.com'),
   array('nom' => 'Jack', 'adresse' => 'another@test.com'),     
   array('nom' => 'Scott Summers', 'adresse' => 'scotts@test.com') 
   ... 
   )
4

2 に答える 2

0
preg_match_all('/(.*?)\s<(.*?)>,?/', $string, $hits);
print_r($hits);

このようなものが機能するはずです。

文字列内にある場合は\r\n、正規表現で解析する前にこれを使用してください。

$chars=array("\r\n", "\n", "\r");
$string=str_replace($chars, '', $string);

更新:これをテストするために使用しているコード。

test_preg2.php:

<?php
$html='"Johnny Test" <johnny@test.com>,Jack <another@test.com>,"Scott Summers" <scotts@test.com>';
$chars=array("\r\n", "\n", "\r");
$html=str_replace($chars, '', $html);
preg_match_all('/(.*?)\s<(.*?)>,?/', $html,$hits);
print_r($hits);
?>

出力:

Array ( [0] => Array ( [0] => "Johnny Test" , [1] => Jack , [2] => "Scott Summers" ) [1] => Array ( [0] => "Johnny Test" [1] => Jack [2] => "Scott Summers" ) [2] => Array ( [0] => johnny@test.com [1] => another@test.com [2] => scotts@test.com ) ) 

更新2:文字列はhtmlentities()でフォーマットされています。(質問のサンプル文字列は間違っています...)

preg_match_all('/(.*?)\s&lt;(.*?)&gt;,?/', $string, $hits);
print_r($hits);
于 2012-11-21T10:53:54.543 に答える
0
$all  = array();
$data = '"Johnny Test" <johnny@test.com>,Jack <another@test.com>,"Scott Summers" <scotts@test.com>';
$emails = explode(',', $data);
foreach ($emails as $email)
{
    if (preg_match('/(.*) <(.*)>/', $email, $regs)) {
        $all[] = array(
            'nom'     => trim($regs[1], '"'), 
            'adresse' => $regs[2],
        );
    }
}

print_r($all);
于 2012-11-21T11:09:27.447 に答える