
下記の$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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- Excel(エクセル) 複数のブックをひとつのブック(複数のシートにまとめる)場合にシートとの順番について 5 2022/12/28 20:47
- Visual Basic(VBA) Excle VBA Findメソッドについて 3 2022/07/15 13:56
- PHP ECCUBE4のページ管理でPHPを実行させたい 1 2023/04/06 11:42
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
STLのvectorで作った配列をメン...
-
mallocで char *型の配列を確...
-
再帰的に処理をする方法
-
特定のURLを正規表現で配列抽出...
-
array_mapの再帰処理がうまく行...
-
PHPとMySQLで100万件のデータを...
-
配列の要素(value)に、変数を...
-
特定の文からメールアドレスの...
-
reallocの使い方について
-
System.String.Splitでエラー
-
PHPでユニークIDを作る
-
Pascalの手続きについて
-
Delphiで別unitで宣言した「TAr...
-
配列をループでたくさん宣言し...
-
複数ファイルで、それぞれの行...
-
doxygenを使用する環境について
-
多次元配列の一次元目の最大値...
-
チェックボックスが複数選択で...
-
外部実行関数を用いて、外部フ...
-
C言語でCSVファイルの行数を読...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
数独かを判断するプログラム
-
行列
-
読み(あ行~わ行)ごとに分け...
-
cakephpでのトランザクション処...
-
delphi 2次元配列がわかりません
-
Perlで重複行を削除したい
-
mallocで char *型の配列を確...
-
STLのvectorで作った配列をメン...
-
連想配列で値が空だったら、要...
-
C言語 最大値と最小値を求めて...
-
配列の要素(value)に、変数を...
-
配列の添え字が小数だとどうなる?
-
特定の文からメールアドレスの...
-
CArrayの要素としてCStringArra...
-
pg_copy_fromの使い方について...
-
CArrayのソート
-
PHPでユニークIDを作る
-
array_mapの再帰処理がうまく行...
-
verilogで、配列の一部をタスク...
おすすめ情報