Regexp不能捕获所有的电子邮件



我正在尝试在php程序中获取电子邮件,我使用以下regexp

([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)b)siU

这似乎可以很好地接收您的标准电子邮件。如me @ gmail.comyou @ hotmail.com

在以co.uk结尾的电子邮件中失败。现在我已经尝试在我的regexp中添加co.uk,如

([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+(?:[A-Z]{2}|com|co.uk|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)b)siU

但这只是给了我与原始regexp相同的输出。其中电子邮件的输出为you@co。我也试过只添加英国。我还遗漏了什么?是第二节课把它搞砸了吗?

理想情况下,我试图使它捕捉所有电子邮件与。net .org co.uk .au .ca。基本上我正在搜索所有美国,英国,AU和CA的电子邮件。谁能指出我的错误是能够正确输出非美国电子邮件,如you @ yoursite.co.uk而不是you @ yoursite.co

谢谢。例如,电子邮件中的空格只是为了让这篇文章发布。

编辑:我不是试图验证电子邮件,它是一系列的电子邮件,可以是一个数组中的任何东西,我试图只捕捉特定的数据库。抱歉一开始没说清楚。

编辑2:这是我的工作字符串为我的问题。谢谢大家

^([a-zA-Z0-9_-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([a-zA-Z0-9-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$^

请勿使用正则表达式验证电子邮件地址。使用正确的库。

请参阅我知道如何验证电子邮件地址,直到我阅读RFC了解更多信息。

|co.uk|

try(不是in[],点不是break link)

|co.uk|

你必须像这样转义点。

co.uk

如果你想只匹配有效的电子邮件,这个正则表达式应该会起作用

(s)?(([^s]+)@([^s]+))

我错过了什么?

您正在向非捕获组添加术语。那么,基于正则表达式的任何输出如何包含非捕获组中的任何内容呢?更不用提nacholibre提到的你添加的术语中的错误

不要在电子邮件中使用正则表达式,你不会喜欢它,而且你会失败的。

使用filter_var ()http://php.net/manual/en/function.filter-var.php

FILTER_VALIDATE_EMAILhttp://www.php.net/manual/en/filter.filters.validate.php

最新更新