我正在尝试匹配一个电子邮件地址,这是我到目前为止所提出的:
String text = "gandalf_storm@mymail.com";
String regex = "(\\w+)@{1}(\\w+){2,}\\.{1}\\w{2,4}";
然而,这适用于以下情况:
gandalf_storm@mymail.com
gandalfstorm@mymail.com
gandalf2storm@mymail.com
所以它匹配任何一个或多个字母数字字符,它在一个@之前重复,然后是重复至少两次的任何字母数字字符(对于任何域名都是最小字符),后跟一个。(点),后跟任何字母数字字符重复至少2次,最多4次(因为有.us或.mobi等域名。)
但是,此表达式不适用于以下电子邮件:
gandalf.storm@mymail.com gandalf.storm@mydomain.me.uk gandalf.storm@mysubdomain.mydomain.me.uk gandalf.storm@mysubdomain.mysubdomain.mydomain.me.uk 等多个子域
或
gandalf.storm@mymail.com gandalf2storm@mydomain.me.uk gandalf_storm@mysubdomain.mydomain.me.uk gandalfstorm@mysubdomain.mysubdomain.mydomain.me.uk
我刚刚开始学习正则表达式,我发现有趣的是试图通过使用正则表达式来解决这些问题..不是部分但是对于每种情况,任何帮助都会非常适合。谢谢
答案 0 :(得分:2)
这个问题在此之前已经被问了很多次。 Here's why您不想使用正则表达式 解析电子邮件地址。请注意,正则表达式的怪物甚至不会处理评论。
答案 1 :(得分:0)
见this question。特别是Good Person的答案。 This article有一些验证电子邮件地址的代码。
答案 2 :(得分:0)
您使用的正则表达式非常严格:
你应该尝试修复这些以匹配更复杂的例子。
作为旁注,当您想要匹配单个字符时,{1}部分不是必需的。
答案 3 :(得分:0)
在你学习的时候回答你的问题。
你的正则表达式与第一批不匹配的问题部分是因为@之前的部分不允许'。'字符。改为:
String regex = "([\\w.]+)@(\\w+){2,}\\.\\w{2,4}";
应该允许gandalf.storm@mymail.com
,因为[\\w.]+
表示组'\ w'(任何字符)或'。'中的任何字符。 (不需要在组的一部分时进行转义,实际上是指一个点)1次或多次
这可能会给你足够的帮助,以便能够自己解决剩下的问题。毕竟这是学习的重点:)
我在http://www.regexplanet.com/simple/index.html测试了这个,它使用java库作为引擎。