
下記の$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を探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
np.stack()とnp.array()の違い
-
多次元配列をエンコードする関...
-
php で1から100までの素数の表...
-
行列
-
System.String.Splitでエラー
-
pythonのnumpyでの繰り返しでの...
-
cakephpでのトランザクション処...
-
再帰関数を用いて配列の合計を...
-
verilogで、配列の一部をタスク...
-
Texでの数式
-
配列をループでたくさん宣言し...
-
C言語でCSVファイルの行数を読...
-
$_SESSIONに二次元配列を使える...
-
多次元配列のカウント+1の仕方
-
SQL文の実行結果を変数で受けて...
-
別ファイルの構造体の値を読み...
-
エラーメッセージ(無効な間接...
-
VB.NET で 二次元のハッシュは...
-
csvの内容を行単位で削除したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
行列
-
CArrayの要素としてCStringArra...
-
Texでの数式
-
読み(あ行~わ行)ごとに分け...
-
CArrayのソート
-
C言語 最大値と最小値を求めて...
-
fgetc関数について
-
PHPのmin関数、「1」以上の数値...
-
連想配列の文字コードを変換
-
STLのvectorで作った配列をメン...
-
C言語のchar ポインタ
-
C言語で全角文字の扱いについて
-
配列を指定した順序でソート
-
php で1から100までの素数の表...
-
delphi 2次元配列がわかりません
-
np.stack()とnp.array()の違い
-
array_intersectで空欄を比較し...
-
cakephpでのトランザクション処...
-
verilogで、配列の一部をタスク...
おすすめ情報