Java Regex电子邮件地址验证

Java Regex电子邮件地址验证,java,regex,email,Java,Regex,Email,有人能给我解释一下这个java正则表达式吗? ^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|in|aero|jobs|museum)$ 此正则表达式用于验证电子邮件地址 ^

有人能给我解释一下这个java正则表达式吗?

^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|in|aero|jobs|museum)$
此正则表达式用于验证电子邮件地址

^                                       # Beginning of the line
[a-z0-9!#$%&'*+/=?^_`{|}~-]+            # One or more (+) characters from the 
                                        bracket expression, i.e., letters [a-z],
                                        numbers [0-9], !, $, %, et cetera
(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*    # Zero or more (*) of the above
                                        expression, preceded by a dot \\.
@                                       # Literal @
(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+ # A digit or a letter, followed by 
                                        optional digits, letters, or dashes, 
                                        followed by a a dot
(?:[A-Z]{2}|com|org|net...)             # Country code ([A-Z]{2}), or a top level
                                        domain, such as com, org, net.
$                                       # End of the line

使用具体示例,
john@foo.com
。电子邮件的第一部分,
john
,将由
^[a-z0-9!#$%&'*+/=?^{{124;}-]+
匹配。
@
将与
@
匹配。域
foo
,以及点,由
(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\)+
匹配。最后,TLD
com
与交替的
(?:[A-Z]{2}com | org | net | gov | mil | biz | info | mobi | name | in | aero | jobs | museum)
验证电子邮件地址现在被认为是不好的做法(),尤其是像你问题中这样的表达方式。例如,这里有一个例子

关于这个表达式,让我们把它分成几个部分:

匹配字符串的开头

^
至少与列表中的一个字符匹配

[a-z0-9!#$%&'*+/=?^_`{|}~-]+
非捕获()组,可重复0..n次,与
匹配,然后与列表中的至少一个字符匹配

(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*
就是这个角色

@
非捕获组匹配此列表中的一个字符
[a-z0-9]
,然后可能匹配以下列表中的更多字符。匹配的管柱必须以[a-z0-9]开头和结尾,管柱内部可以有[a-z0-9-]

(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+
与2个大写字母或其中一个单词匹配的非捕获组

(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|in|aero|jobs|museum)
绳子的末端

$

这是你不理解的一般表达还是它的一部分?如果我可以问的话,你为什么需要理解regexp?你说的“解释”是什么意思?您不了解哪一部分?不要使用您不完全了解的复制粘贴正则表达式来匹配内容…您最好使用一些库来进行验证-例如Apache Commons-签出,这样您就不必了解复杂的正则表达式…为了理解正则表达式,您必须首先理解正则表达式。还有,@hovanesyan说的话。简单解释一下。谢谢你的朋友。