我有以下RegEx匹配字符串,可以很好地匹配大多数SMTP地址。它已经过彻底测试,并且已知运行良好,并且正确匹配绝大多数SMTP地址,其域扩展名(.com,.net ...)与匹配字符串中给出的扩展名列表相匹配(字面上测试超过1百万SMTP地址)。
然而,有两个问题。
1)在编写本文时,扩展名列表与您在字符串末尾看到的相同。现在,还有更多有效的扩展,并且该列表可能会继续增长。
2)我是一个完整的RegExp新手,修改它是在我的联盟之外。我工作的所有同事都是如此。
我认为维持此功能以匹配仅有效的域名扩展名是切实可行的,因为它们太多了,列表会继续增长。所以,我想做的是修改它以允许任何扩展:
a)介于2到6个字符之间。 b)仅包含字母字符。
如果有人认为我应该考虑将我的a)或b)改为别的,那么我也会接受这种反馈。
这用于C#app。
提前感谢您的帮助。这是:
private const string MatchSmtpRegEx = @"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)\b";
答案 0 :(得分:1)
目前,此非捕获组与顶级域名匹配:
(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)
它匹配任何2个大写字母或您在上面看到的任何选项。
您只需更改此部件即可满足您的要求。这是您应该将其更改为:
(?:[a-zA-Z]{2,6})
与a-z或A-Z匹配的非捕获组,2到6次。