0

次のようなコンテンツを受信して​​います。

"Jane Doe" <jane@doe.com>, "John Doe" <john@doe.com>

そして、メールアドレスを抽出したいと思います:

jane@doe.com, john@doe.com

現在、私は次のような正規表現を持っています:

/<(.*)>/

かっこの間のすべてを取得しますが、次のようなものも取得します。

jane@doe.com>, "John Doe" <john@doe.com

途中で @ 記号を使用した場合も、正しく機能しませんでした。

/<(.*)@(.*)>/

explode()コンマに基づいて行うこともできますが、preg_match()私が望むものを提供する方法があるはずだと考えています. 正規表現で何が欠けていますか?

4

4 に答える 4

3

私はこれをメールの照合に使用しています。より多くのメールアドレスをキャッチできる他の表現が世の中にあることは知っていますが、これはすばやく入力でき、これまでのところすべてのニーズに合っていることがわかりました。お気軽に試してみてください。

/\w+[\.\w]+@\w+[\.\w]+/

これを preg_match_all と一緒に使用して、すべてのアドレスをキャプチャすることができます。

例えば:

$string = '"Jane Doe" <jane@doe.com>, "John Doe" <john@doe.com>';
preg_match_all('/\w+[\.\w]+@\w+[\.\w]+/', $string, $matches);
print_r($matches);
于 2012-04-17T19:47:12.407 に答える
3

あなたの正規表現は貪欲すぎます。代わりに使用/<(.*?)>/するか、次のようなものを使用することをお勧めします

/<([^<>]+@[^<>]+)>/
于 2012-04-17T19:45:21.970 に答える
1

最も簡単な方法は、最後の区切り記号を除くすべてを一致させることです。

/<([^>]*)>/
于 2012-04-17T19:40:41.607 に答える
0

ドットを含めすぎています。これを試して:

/<([^>]*)>/
于 2012-04-17T19:40:56.583 に答える