有人可以向我解释一下这个java Regex吗?
^[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)$
此正则表达式用于验证电子邮件地址。
答案 0 :(得分:12)
现在,验证电子邮件地址被视为不良做法(stop validating email addresses with regex),尤其是在您的问题中使用此类表达式。例如,这是一个more complete expression。
至于这个表达式,让我们分解它:
匹配字符串的开头
^
匹配列表中的至少一个字符
[a-z0-9!#$%&'*+/=?^_`{|}~-]+
非捕获(see backreference)组,可以重复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)
字符串结束。
$
答案 1 :(得分:3)
^ # 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!#$%&'*+/=?^_{|}~-]+
匹配。 @
将匹配@
。域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)
匹配。