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<(.*?)>,?/', $string, $hits);
print_r($hits);