2012-04-17 8 views
0

私のようなコンテンツを受信して​​いますで複数の電子メールアドレスをextracingため正規表現PHP

[email protected], [email protected] 

を現在、私はこのような正規表現を持っています::のようなものを括弧の間のすべてを取得しますが、それはまた、取得

/<(.*)>/ 
[email protected]>, "John Doe" <[email protected] 

私は途中で@記号を使用した場合、それはまた、非常に適切に動作しませんでした:

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

私はカンマをもとにexplode()できたが、私はそこには思っているが、あるべきpreg_match()私が欲しいものを私に与える方法。正規表現では何が分かりませんか?

/<([^>]*)>/ 

答えて

3

あなたの正規表現もgreedyです。代わりに/<(.*?)>/を使用するか、または私は電子メールを一致させるためにこれを使用

/<([^<>][email protected][^<>]+)>/ 
+0

+1 "greediness"に注目してください。 – Wiseguy

1

最も簡単な方法は、最終的な区切り文字以外のすべてを一致させることです。試してみてください:

/<([^>]*)>/ 
0

あなたは、ドット付きすぎ含めている:

3

のような、より良いとしても、何か、私は他の表現が複数の電子メールアドレスをキャッチすることが野生にそこにある知っているが、私は、これは迅速に入力するために、1つを見つけるので、

012:

/\w+[\.\w][email protected]\w+[\.\w]+/ 

あなたはすべてのアドレス

例えば

をキャプチャするためにpreg_match_allでこれを使用することもできます。これまでのすべての私のニーズに合った、それを試してみること自由に感じ

$string = '"Jane Doe" <[email protected]>, "John Doe" <[email protected]>'; 
preg_match_all('/\w+[\.\w][email protected]\w+[\.\w]+/', $string, $matches); 
print_r($matches); 
+0

+1は 'preg_match_all()'に言及しています。 – Wiseguy