6

これを処理できるものがある場合、電子メールフォームの「To」行からの文字列から電子メールアドレスを抽出するための正しい正規表現パターンは何でしょうか。これにより、アドレスをコンマ「、」、セミコロン「;」で区切ることができます。 、スペース、または3つの任意の組み合わせ。正規表現は、アドレスが「<」および「>」文字で囲まれている場合や、電子メールアドレスの横に実際の名前がある場合など、「ノイズ」テキストを無視できる必要もあります。たとえば、Toフィールドにあったこの文字列から:

"Joe Smith" <jsmith@example.com>, kjones@aol.com; someoneelse@nowhere.com mjane@gmail.com

パターンは、次の一致を返すことができる必要があります:jsmith @ example、kjones @ aol.com、someoneelse @ nowhere.com、mjane @ gmail.com

私はPHPを使用しているので、これを単一の正規表現で実行できない場合は、他のPHPベースのソリューションを確実に受け入れることができます。

ありがとう

4

3 に答える 3

7

試す

\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b

RegexBuddyの礼儀)のように

preg_match_all('/\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b/i', $subject, $result, PREG_PATTERN_ORDER);
$result = $result[0];

/i大文字と小文字を区別しないように修飾子に注意してください。

文字列内の電子メールアドレスを検索するための正規表現の欠点の説明については、この質問も参照してください。

于 2010-10-07T21:08:50.310 に答える
1

http://www.webcheatsheet.com/php/regular_expressions.phpから正規表現を取得し、少しだけ変更しました。

$string = '"Joe Smith" <jsmith@example.com>, kjones@aol.com; someoneelse@nowhere.com mjane@gmail.com';
$email_regex = "/[^0-9< ][A-z0-9_]+([.][A-z0-9_]+)*@[A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}/";
preg_match_all($email_regex, $string, $matches);
$emails = $matches[0];

これで、$emailsにはすべての電子メールアドレスを含む配列が含まれるようになります。

于 2010-10-07T21:16:31.400 に答える
1

あなたの質問は正規表現に固有のものであり、Timはあなたに素晴らしい答えを与えましたが、簡単な解決策を探している人は、http://php.net/manual/en/function.mailparse-rfc822-parse-addressesページのmailparse_rfc822_parse_addressesを見てください。 php

これは標準のPHP関数ではなく、拡張機能をインストールする必要があることに注意してください。エコノミーホスティングソリューションでは、PECL拡張機能をインストールできない場合があります。

于 2015-07-17T16:47:02.383 に答える