我正在尝试编写一个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
多数民众赞成我想要的,但它也匹配网址。如何排除匹配的网址?
答案 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\))