人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpで正規化を使用して名前、Mailアドレスを分割格納を行いたいです。サンプルコードを教えてください。
対象文字列は、
"名前1"<aaa1@bbb1.com>,"名前2"<aaa2@bbb2.com>
です


●質問者: kirara_namazu
●カテゴリ:インターネット ウェブ制作
✍キーワード:PHP アドレス コード 名前 文字列
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● うぃんど
●27ポイント

サンプル

<?php
$text = "\"名前1\"<aaa1@bbb1.com>,\"名前2\"<aaa2@bbb2.com>";
if ( preg_match_all( '!"(.+?)"<(.+?)>!s', $text, $mailAddressArray ) ) {
 $n = count( $mailAddressArray[0] );
 for( $i = 0; $i < $n; $i++ ) {
 echo $mailAddressArray[1][$i] . ' : ' . $mailAddressArray[2][$i] . "<br />\n";
 }
} else {
 echo 'マッチしませんでした';
}

実行結果

名前1 : aaa1@bbb1.com
名前2 : aaa2@bbb2.com

http://php.net/manual/ja/function.preg-match-all.php

◎質問者からの返答

ありがとうございます。splitが5.3では非推奨です。なにか変わりがありませんか


2 ● HowAreYou
●27ポイント

分割格納というのがどういう形式なのか分かりませんが、一例として。

<?php
$str = <<<ENDSTR
"名前1"<aaa1@bbb1.com>,"名前2"<aaa2@bbb2.com>,"名前3"<aaa3@bbb3.com>
ENDSTR;

$list = array() ;

foreach (split(',', $str) as $k => $v) {
 preg_match('/"(.*?)"<(.*?)>/', $v, $m) ;
 $list[] = array($m[1], $m[2]) ;
}

print_r($list) ;

http://q.hatena.ne.jp/

◎質問者からの返答

ありがとうございます。

$strに,aaa4@bbb4.com,が混ざっていても取れるようにできないでしょうか


3 ● Galapagos
●26ポイント

下記のようにすればできます。

なお、スクリプトはUTF-8で記述することが前提です。

もし$strがUTF-8意外でしたら、mb_convert_encoding関数を使ってUTF-8に変換してからpreg_match_all関数を適用してください。

<?php
$str = '"名前1"<aaa1@bbb1.com>,"名前2"<aaa2@bbb2.com>';

//配列$arrに分割格納する
$count = preg_match_all("/\"([^\"]*)\"<([0-9a-z!#\$%\&'\*\+\/\=\?\^\|\-\{\}\.]+@[0-9a-z!#\$%\&'\*\+\/\=\?\^\|\-\{\}\.]+)>,?/u", $str, $arr);

//分割格納した内容を表示
for ($i = 0; $i < $count; $i++) {
 echo $arr[1][$i] . ', ' . $arr[2][$i] . '<br />';
}
?>

split関数はPHP5.3で非推奨となり、上で使っているpreg系関数に移行することが推奨されています。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ