我正在尝试匹配具有以下名称的gmail域的电子邮件:a-z,加号|.。因此,在以下电子邮件列表中:
answer.me...charlie@gmail.com
answer.me...charlie@tsunami.org
godfrey+assclown@gmail.com
wisk+as+w+e+rain@gmail.com
atomic+sam@outlook.org
canceee@gmail.com
linkedrebel@gmail.com
nuclearimpact+empoly@gmail.com
clericly.ass@gmail.com
r@gmail.com
应该匹配:
answer.me...charlie@gmail.com
godfrey+assclown@gmail.com
wisk+as+w+e+rain@gmail.com
nuclearimpact+empoly@gmail.com
clericly.ass@gmail.com
我尝试过:
^((?=.*[a-z])(?=.*[.+]).+)@(g(?:oogle)?mail\.com)$
但是列表[.+]
中的点与域名的点匹配,从而使所有域名都匹配。如果删除点,则仅匹配带有加号字符作为名称的电子邮件。有什么解决办法吗?
Regex101:https://regex101.com/r/bKqzan/1
答案 0 :(得分:1)
您可以使用lower()
修饰所有点:
[^@]
这样,所有前瞻限制仅适用于^(?=[^@]*[a-z])(?=[^@]*[.+])([^@]+)@(g(?:oogle)?mail\.com)$
之前的部分。更加有效的变体:
@
请参见regex demo。
详细信息
^(?=[^@a-z]*[a-z])(?=[^@.+]*[.+])([^@]+)@(g(?:oogle)?mail\.com)$
-字符串变体^
-正向超前,要求(?=[^@]*[a-z])
以外的任何0+字符后必须使用小写字母@
-正向超前,要求(?=[^@]*[.+])
以外的任何0+字符后加一个加号或一个点。@
-组1:除([^@]+)
以外的1个以上的字符@
-一个@
字符@
-第2组:(g(?:oogle)?mail\.com)
(可选)后跟g
,然后是oogle
mail.com
-字符串的结尾。答案 1 :(得分:0)
我认为您不需要先行。您要匹配(a)零个或多个小写字母,然后匹配(b)至少一个点或加号,然后匹配(c)零个或多个小写字母,点和/或加号。正确?所以这应该工作:
^([a-z]*[.+]+[a-z.+]*)@(g(?:oogle)?mail\.com)$
(请参见regex101 demo)