Java 将电子邮件与regex匹配时出现问题

Java 将电子邮件与regex匹配时出现问题,java,regex,Java,Regex,我正在尝试匹配一个电子邮件地址,这是我迄今为止想到的: String text = "gandalf_storm@mymail.com"; String regex = "(\\w+)@{1}(\\w+){2,}\\.{1}\\w{2,4}"; 但是,这适用于以下情况: 甘道夫_storm@mymail.com gandalfstorm@mymail.com gandalf2storm@mymail.com 因此,它匹配任何重复一次或多次的字母数字字符,该字符位于一个@之前,后跟任何重复至少

我正在尝试匹配一个电子邮件地址,这是我迄今为止想到的:

String text = "gandalf_storm@mymail.com"; 
String regex = "(\\w+)@{1}(\\w+){2,}\\.{1}\\w{2,4}";
但是,这适用于以下情况:

甘道夫_storm@mymail.com
gandalfstorm@mymail.com
gandalf2storm@mymail.com

因此,它匹配任何重复一次或多次的字母数字字符,该字符位于一个@之前,后跟任何重复至少两次的字母数字字符(对于任何域名来说,这是最小的字符),后跟一个(点),后跟任何重复至少2次、最多4次的字母数字字符(因为存在.us或.mobi等域)

但是,此表达式不适用于以下电子邮件:

甘道夫。storm@mymail.com 甘道夫。storm@mydomain.me.uk 甘道夫。storm@mysubdomain.mydomain.me.uk 甘道夫。storm@mysubdomain.mysubdomain.mydomain.me.uk 等尽可能多的子域

甘道夫。storm@mymail.com gandalf2storm@mydomain.me.uk 甘道夫_storm@mysubdomain.mydomain.me.uk gandalfstorm@mysubdomain.mysubdomain.mydomain.me.uk


我刚刚开始学习regex,我发现尝试使用regex解决这些问题很有意思。不是部分地,但对于每种情况,任何帮助都是非常宝贵的。谢谢你

这个问题在这之前已经被问过很多次了。你不想使用regex吗
解析电子邮件地址。请注意,regex的怪物甚至不处理评论。

请参阅。特别是好人的回答。有一些验证电子邮件地址的代码。

您使用的regex非常严格:

  • 在@之前使用\w character类不允许使用.character,这解释了gandalf.storm不匹配的原因
  • 在正则表达式的域部分,您只允许两个用.character分隔的“单词”,这不包括“mysubdomain.mydomain.net”
您应该尝试修复这些问题,以匹配更复杂的示例


作为补充说明,当您想要匹配单个字符时,{1}部分不是必需的。

在您学习时回答您的问题

正则表达式与第一批不匹配的问题部分是因为@前面的部分不允许使用“.”字符。更改为:

 String regex = "([\\w.]+)@(\\w+){2,}\\.\\w{2,4}";
应该允许甘道夫。storm@mymail.com,因为
[\\w.]+
表示组中的任何字符“\w”(任何字符)或“.”(作为组的一部分时不需要转义,实际上表示点)1次或多次

这可能会给你足够的帮助,让你能够自己解决剩下的问题。毕竟,这是学习的重点:)


我在使用java库的引擎上进行了测试。

我刚刚找到了学习regex的合适示例当然我不会用它解析我的电子邮件,我只是尝试通过一些示例来学习regex如果你想学习regex,那就从一个可以使用regex的主题开始。电子邮件地址不是这些主题之一。@Sam Holder从您的Expirence开始,可以在哪些主题上使用regex?(…通常您不需要处理注释,因为这是RFC822标题格式的一部分,而不是电子邮件地址的一部分。但是,是的,这种regex“验证”是一个糟糕的主意。)@bobince你还有其他一些使用正则表达式的例子吗?学习是这里不使用的重点,当然我不会用正则表达式验证它,检查它是否包含@对我来说就足够了。