正则表达式用于在 PHP 中扩展多个电子邮件地址


Regex for extracing multiple email addresses in PHP

我收到的内容如下:

"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()给我我想要的东西。我的正则表达式中缺少什么?

你的正则表达式太贪婪了。改用/<(.*?)>/,甚至更好的是类似的东西

/<([^<>]+@[^<>]+)>/

我用它来匹配电子邮件,我知道还有其他表达式可能会捕获更多的电子邮件地址,但我发现这个可以快速输入并且到目前为止适合我的所有需求,请随时尝试:

/'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);

最简单的方法是匹配除最终分寸之外的所有内容:

/<([^>]*)>/

你用点包含了太多。试试这个:

/<([^>]*)>/
相关文章: