• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:正規表現で切り出せません。 < と > の間?)

正規表現でメールアドレスを切り出す方法

このQ&Aのポイント
  • PHP5.1.6で正規表現を使用してメールアドレスを切り出す方法について教えてください。
  • 例-1ではうまくメールアドレスが表示されますが、例-2では表示されません。
  • メールアドレスを切り出すための正しい方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

例2では、『<>』を含んだメールアドレスの文字列を 作成する部分(例1でいうところの『$test="教えてお名前 <****@*******.com>";』) へまだ到達できていないようですね。 見返してみると、kiyomidesuyoさんが最初に乗せていただいている 上記のコード、1行目の$mboxesがその後使用されていない辺りなど、 何か誤りがあるような気がしています。 もう一度、一行処理を行うごとに、自分の予想している変数の値が 正しくセットされているかどうか デバッグしながら試してみることをお勧めします。

kiyomidesuyo
質問者

お礼

ありがとうございます。 途中を見てみても原因は分かりませんでした。。。 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

その他の回答 (2)

回答No.2

> かといって、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"; の結果はどうなっていますか?

kiyomidesuyo
質問者

補足

ありがとうございます。 ご指示のコードを表示させました。 $header->fromaddress : =?iso-2022-jp?B?GyRCQERMWiF3TDgldjVWGyhC?= $from : 教えてお名前 htmlspecialcharsを除くとメールアドレスが無いみたいです。。

回答No.1

> $from = htmlspecialchars(mb_decode_mimeheader($head->fromaddress)); この行の変換によって、  "教えてお名前 <****@*******.com>"   ⇒"教えてお名前 &lt;****@*******.com&gt;" に変換されてしまうことが原因だと思います。 これでは正規表現にマッチしませんね。

kiyomidesuyo
質問者

補足

早速、回答頂きましてありがとうございます。 htmlspecialchars の意味をあまり考えずに使っていました。 かといって、htmlspecialchars を外すと目的のメールアドレスまで表示しなくなるのですが、何かいい方法はありませんでしょうか? 若しくは、この流れではない方法でメールアドレスを取得するしかないのでしょうか? 何か解決方法を伝授していただけないでしょうか? 宜しくお願いいたします。

関連するQ&A