Java 用于匹配电子邮件的正则表达式也匹配URL
我正在尝试编写一个正则表达式,用于提取多种形式的电子邮件: user@domain.com , user@sub.domain.com,域.com上的用户,域.com上的用户 这是我的照片(我知道很天真): 这与我想要的匹配,但也与URL匹配。如何排除URL匹配?我认为这部分Java 用于匹配电子邮件的正则表达式也匹配URL,java,regex,Java,Regex,我正在尝试编写一个正则表达式,用于提取多种形式的电子邮件: user@domain.com , user@sub.domain.com,域.com上的用户,域.com上的用户 这是我的照片(我知道很天真): 这与我想要的匹配,但也与URL匹配。如何排除URL匹配?我认为这部分 (\w+(?:\.|\s*dot\s*)) 负责URL匹配。检查本教程-考虑以下元素: (?:@?|(at)?|(\s*at\s*)?|(\(at\))?) 简而言之,您有太多的?s,这样一个完全空的字符串将匹配其中的
(\w+(?:\.|\s*dot\s*))
负责URL匹配。检查本教程-考虑以下元素:
(?:@?|(at)?|(\s*at\s*)?|(\(at\))?)
简而言之,您有太多的?
s,这样一个完全空的字符串将匹配其中的几个,这样就根本不需要匹配(at)
,@
或at
因为您已经用
s分隔了分支,所以不需要用?
s将单个分支标记为不必要的——只需要其中一个分支匹配,但该分支应该是非可选的。您的问题是非捕获组(?:@?(at)?|(\s*at\s*)((at))?
。有了所有的?
s,您可以完全选择任何匹配。将该部分替换为:
(?:@|at|\(at\))
谷歌!找到一个
\b[A-Z0-9.\u%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b
只需编辑带有选项的@
部分即可。@Nishant如果他用现有组替换该正则表达式中的?
,他就会破坏它,也是——他的一个更大的错误就在那一部分。@Nishant是真的,但我想学习如何手工制作并揭示我的错误。我不是在找菜谱。学习很好。:)我只是在暗示缩短解决方案。我认为这个问题很好。
(?:@|at|\(at\))