
下記の$text内の文章からメールアドレスのみ抽出し、配列に格納したいと思ったのですが、どのようにすればそのような事ができるのかわからなかったので、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。
<?php
$text = <<<END
"test1@test.co.jp"
"test2@test.co.jp" <test2@test.co.jp>
テスト
test3@test.co.jp
END;
?>
なお、重複するメールアドレスは一つにまとめたいので、上記の場合、下記の値を取得したいと思います。
$array[0] = test1@test.co.jp;
$array[1] = test2@test.co.jp;
$array[2] = test3@test.co.jp;
以上、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
if(preg_match_all("/(\w+[-+\w.]+@[-\w.]+\.\w{2,5})/",$text,$addr)){
$addr=array_unique($addr[0],SORT_STRING);
}
print_r($addr);
でどうですか。
ご回答ありがとうございます。
ご教示いただいたソースである程度意図した動作になりました。
ちなみに1点お伺いしたいのですが、ご教示いただいたメールアドレスの正規表現ですと、RFCに準拠していないメールアドレスも抽出できてしまいました。
今回下記のような正規表現は使えないのでしょうか?
http://catbot.net/blog/2007/06/re_php.html
移植できないか試してみたところ、出力結果がArrayなどになってしまい、移植できませんでした。
以上、よろしくお願いします。
No.3
- 回答日時:
そのような要件なのであれば、petitaさんが記述された構文で、大雑把なメールアドレスと取れる部分の文字列を全部抽出して、
その後に、RFCに準拠しているかどうかをチェックしたほうが良いのではないですか。
抽出をしてから、バリデーションをかけるようにしたほうが、デバッグやログもはきやすいのではないですか。
ご回答ありがとうございます。
確かにそうですね。
抽出してからチェックすれば大丈夫そうなので、その方法で対応したいと思います。
このたびはどうもありがとうございました。
以上、よろしくお願いします。
No.2
- 回答日時:
> RFCに準拠していないメールアドレスも抽出できてしまいました。
この件については承知していますが実際には、
1.RFCに準拠していても無効な場合が多々ある(プロバイダが使用できる文字・記号を制限している)
2.RFCに準拠していなくても有効な場合がある(たとえば、先頭または末尾にドットを使ったり、ドットを連続して使うのはRFCに逸脱しているが携帯では許容されている)
ですから、「RFC準拠という正規表現」でチェックすることには意味がありません。(と私としては思っています)
ご回答ありがとうございます。
本件ですが、メールアドレスを抽出した後、メールを送信する仕組みを考えており、メールの送信はできております。
なお、メール送信の仕様は下記となります。
1. RFCに準拠しないメールアドレスにはメールを送信しない
(そのためドットが連続する実在のメールアドレスにはメールを送信しません)。
2. RFCに準拠しているメールアドレスにはメールを送信する
(そのため実在しなければリターンメール?になるのかなと思っています)。
そして現在の正規表現の場合、2は(結果的に)実現できていると思うのですが、1が実現できていない状況と思われます。
実際には仕様1のメールに送信しようとするのですが、メール送信の際、RFC非対応という事で結局相手には届かない為、届かないという現実は変わらないのですが、現在は送信動作実施→送信失敗になると思われるのに対し、メールアドレスの抽出自体を抑止することで、送信動作実施→送信失敗を抑止できた方が好ましいなと思いました。
以上、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CArrayのソート
-
delphi 2次元配列がわかりません
-
forとかで連番の変数を一気に格...
-
行列
-
配列の添え字が小数だとどうなる?
-
mallocで char *型の配列を確...
-
読み(あ行~わ行)ごとに分け...
-
postgresql関数をつかったレコ...
-
○番目から○番目までの取り出し...
-
【Smarty】foreach関数やsectio...
-
php Undefined variableエラー
-
foreachの値をメール本文に表示...
-
$_SESSIONに二次元配列を使える...
-
プルダウンメニューにDBの内容...
-
file_existsでファイル名の部分...
-
smartyで配列の中の同数値の数...
-
PHP 多次元配列変数のデータ受...
-
PHPで多次元配列を一度に処理す...
-
多次元配列の中で条件に合う要...
-
行数が30万件ほどあるCSVから、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
cakephpでのトランザクション処...
-
行列
-
読み(あ行~わ行)ごとに分け...
-
特定の文からメールアドレスの...
-
c言語 単位行列
-
STLのvectorで作った配列をメン...
-
多次元配列をエンコードする関...
-
2次元配列を1次元配列にするには
-
phpで、配列の値が意図せず変わ...
-
Delphiで別unitで宣言した「TAr...
-
連想配列に追加ってできるン?
-
正規表現
-
配列の並びについて
-
PHPでCSVを出力するさいに、ル...
-
pascalについて知りたいのです...
-
文字列の取得について
-
ファイルの書き込みについて教...
-
数独かを判断するプログラム
-
文字列の並び替え
おすすめ情報