我正在尝试在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.com
或you @ 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