POSIX BRE语法为负向前瞻/未后跟

时间:2017-04-27 18:39:49

标签: regex posix

我尝试使用一些排除项创建电子邮件验证。基本上,忽略这种格式的电子邮件地址,过滤掉所有城市政府和学校: user@ci...ususer@..[a-z]{2}.us

GitHub issue提到否定的字符类[^],替换|和字符串锚$的结尾。我怎样才能重写以下内容,哪些方法没有展望?

[a-zA-Z_0-9.-]+<@[a-zA-Z_0-9-]+?\.+[a-zA-Z_0-9.-]+?\.(us|info|to|br|bid|cn|ru)

使用一些正则表达式验证器,这可以使用标准的预测:

(?!.*\@ci\..+?\.us$)(?!.*\@*\..+?\.ca.us$)([a-zA-Z_0-9.-]+@[a-zA-Z_0-9-]+?\.+[a-zA-Z_0-9.-]+?\.(us|info|to|br|bid|cn|ru)

我的第一次尝试使我找到了这个解决方案,它只能部分处理第一个前瞻(我用字边界\b收紧了顶级域名:

[a-zA-Z_0-9.-]+<@([^c"][^"]+|c[^i"][^+]+|ci[^i"][^i"])[a-zA-Z_0-9-]+?\.+[a-zA-Z_0-9.-]+?\.(\bus\b|\binfo\b|\bto\b|\bbr\b|\bbid\b|\bcn\b|\bru\b|\bu\b)

1 个答案:

答案 0 :(得分:0)

这是我能得到的尽可能接近,但它让我在那里:

[a-zA-Z_0-9.-]+<@([^c]+|c(c|ic)+([^ic]|i[^c][^ic]))+(c(c|ic)+(i|ic))+?\.+[a-zA-Z_0-9.-]+?\.(\bus\b|\binfo\b|\bto\b|\bbr\b|\bbid\b|\bcn\b|\bru\b|\buss\b|\bbw\b|\bu\b)

澄清我希望排除Locality domains&amp;公立学区的亲和命名空间。上述内容将排除something@ci.subdomain.us(以及易于发送垃圾邮件的TLD以.info|to|br|bid|cn|ru|uss|bw|u结尾),但事实证明,这些地址通常包含4个级别/部分,例如info@ci.boston.ma.usThis blog entry给了我一个线索。

相关问题