- ベストアンサー
特定の文からメールアドレスのみ抽出する方法
- 下記のテキストからメールアドレスのみを抽出し、配列に格納する方法についてアドバイスをいただきたいです。
- また、重複するメールアドレスは一つにまとめる必要があります。
- 抽出したメールアドレスは、配列$arrayに格納していきます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
if(preg_match_all("/(\w+[-+\w.]+@[-\w.]+\.\w{2,5})/",$text,$addr)){ $addr=array_unique($addr[0],SORT_STRING); } print_r($addr); でどうですか。
その他の回答 (2)
- hogehoge78
- ベストアンサー率80% (433/539)
そのような要件なのであれば、petitaさんが記述された構文で、大雑把なメールアドレスと取れる部分の文字列を全部抽出して、 その後に、RFCに準拠しているかどうかをチェックしたほうが良いのではないですか。 抽出をしてから、バリデーションをかけるようにしたほうが、デバッグやログもはきやすいのではないですか。
お礼
ご回答ありがとうございます。 確かにそうですね。 抽出してからチェックすれば大丈夫そうなので、その方法で対応したいと思います。 このたびはどうもありがとうございました。 以上、よろしくお願いします。
- petita
- ベストアンサー率53% (8/15)
> RFCに準拠していないメールアドレスも抽出できてしまいました。 この件については承知していますが実際には、 1.RFCに準拠していても無効な場合が多々ある(プロバイダが使用できる文字・記号を制限している) 2.RFCに準拠していなくても有効な場合がある(たとえば、先頭または末尾にドットを使ったり、ドットを連続して使うのはRFCに逸脱しているが携帯では許容されている) ですから、「RFC準拠という正規表現」でチェックすることには意味がありません。(と私としては思っています)
お礼
ご回答ありがとうございます。 本件ですが、メールアドレスを抽出した後、メールを送信する仕組みを考えており、メールの送信はできております。 なお、メール送信の仕様は下記となります。 1. RFCに準拠しないメールアドレスにはメールを送信しない (そのためドットが連続する実在のメールアドレスにはメールを送信しません)。 2. RFCに準拠しているメールアドレスにはメールを送信する (そのため実在しなければリターンメール?になるのかなと思っています)。 そして現在の正規表現の場合、2は(結果的に)実現できていると思うのですが、1が実現できていない状況と思われます。 実際には仕様1のメールに送信しようとするのですが、メール送信の際、RFC非対応という事で結局相手には届かない為、届かないという現実は変わらないのですが、現在は送信動作実施→送信失敗になると思われるのに対し、メールアドレスの抽出自体を抑止することで、送信動作実施→送信失敗を抑止できた方が好ましいなと思いました。 以上、よろしくお願いします。
お礼
ご回答ありがとうございます。 ご教示いただいたソースである程度意図した動作になりました。 ちなみに1点お伺いしたいのですが、ご教示いただいたメールアドレスの正規表現ですと、RFCに準拠していないメールアドレスも抽出できてしまいました。 今回下記のような正規表現は使えないのでしょうか? http://catbot.net/blog/2007/06/re_php.html 移植できないか試してみたところ、出力結果がArrayなどになってしまい、移植できませんでした。 以上、よろしくお願いします。