匹配带有a-z和点或加号的电子邮件

时间:2019-06-21 18:27:53

标签: regex pcre

我正在尝试匹配具有以下名称的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

2 个答案:

答案 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