- ベストアンサー
正規表現でメールアドレスを切り出す方法
- PHP5.1.6で正規表現を使用してメールアドレスを切り出す方法について教えてください。
- 例-1ではうまくメールアドレスが表示されますが、例-2では表示されません。
- メールアドレスを切り出すための正しい方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
例2では、『<>』を含んだメールアドレスの文字列を 作成する部分(例1でいうところの『$test="教えてお名前 <****@*******.com>";』) へまだ到達できていないようですね。 見返してみると、kiyomidesuyoさんが最初に乗せていただいている 上記のコード、1行目の$mboxesがその後使用されていない辺りなど、 何か誤りがあるような気がしています。 もう一度、一行処理を行うごとに、自分の予想している変数の値が 正しくセットされているかどうか デバッグしながら試してみることをお勧めします。
その他の回答 (2)
- seimurakam
- ベストアンサー率61% (21/34)
> かといって、htmlspecialchars を外すと目的のメールアドレスまで表示しなくなるのですが、 ん…? $from = htmlspecialchars(mb_decode_mimeheader($head->fromaddress)); この行丸々削除してるってことですか? $mboxes = imap_check($mbox); $head = imap_header($mbox, $i); echo "\$header->fromaddress : ".$head->fromaddress."<br />\n"; $from = mb_decode_mimeheader($head->fromaddress); echo "\$from : ".$from."<br />\n"; の結果はどうなっていますか?
補足
ありがとうございます。 ご指示のコードを表示させました。 $header->fromaddress : =?iso-2022-jp?B?GyRCQERMWiF3TDgldjVWGyhC?= $from : 教えてお名前 htmlspecialcharsを除くとメールアドレスが無いみたいです。。
- seimurakam
- ベストアンサー率61% (21/34)
> $from = htmlspecialchars(mb_decode_mimeheader($head->fromaddress)); この行の変換によって、 "教えてお名前 <****@*******.com>" ⇒"教えてお名前 <****@*******.com>" に変換されてしまうことが原因だと思います。 これでは正規表現にマッチしませんね。
補足
早速、回答頂きましてありがとうございます。 htmlspecialchars の意味をあまり考えずに使っていました。 かといって、htmlspecialchars を外すと目的のメールアドレスまで表示しなくなるのですが、何かいい方法はありませんでしょうか? 若しくは、この流れではない方法でメールアドレスを取得するしかないのでしょうか? 何か解決方法を伝授していただけないでしょうか? 宜しくお願いいたします。
お礼
ありがとうございます。 途中を見てみても原因は分かりませんでした。。。 htmlspecialchars をしないとメールアドレスが表示しないので、 その場しのぎな感じなのですが、 htmlのソースを見てみると確かに &lt; &gt; になっているので そこだけ、再度< > に変換して乗り切りました。 $head = imap_header($mbox, $i); $from = htmlspecialchars(mb_decode_mimeheader($head->fromaddress)); //ここで、再度 < > だけ変換 &は全角にしています。 $after = str_replace("&lt;", "<", $from); $after1 = str_replace("&gt;", ">", $after); //ここから、正規表現で抽出 $pattern = "<(.*)>"; if (preg_match( "/".$pattern."/i", "$after1", $match ) ){ $from1 = $match[1]; echo $from1."変換後メールアドレスだけ!"; } 今一度、この件はしっかり勉強しないといけないかとは思いますが、 今回はこれで目的までたどり着きそうなので! 最後までお付き合い頂いて、ありがとうございましたm(__)m