用于匹配电子邮件的RegEx也匹配URL

时间:2012-03-19 16:30:43

标签: java regex

我正在尝试编写一个RegEx,它将提取多种形式的电子邮件:

user@domain.com,user@sub.domain.com,domain dot com用户,user(at)domain dot com

这是我的镜头(天真,我知道):

(\w+)\s*(?:@?|(at)?|(\s*at\s*)?|(\(at\))?)\s*(\w+(?:\.|\s*dot\s*)){1,}com

多数民众赞成我想要的,但它也匹配网址。如何排除匹配的网址?

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

我认为这部分

(\w+(?:\.|\s*dot\s*))

负责URL匹配。

答案 2 :(得分:0)

考虑这个元素:

(?:@?|(at)?|(\s*at\s*)?|(\(at\))?)

简短的回答是你有太多?个,这样一个完全空的字符串会匹配其中的几个字符串,因此没有(at)@或{{1}完全匹配是必要的。

因为您已经将分支与at分开了,所以您不需要|来将单个分支标记为不必要 - 只需要其中一个分支匹配,但是一个应该是非选择性的。

答案 3 :(得分:0)

您的问题是非捕获组(?:@?|(at)?|(\s*at\s*)?|((at))?)。使用所有? s,您完全可以选择任何匹配。用以下内容替换该部分:

(?:@|at|\(at\))