有人可以向我解释这个 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)$
此正则表达式用于验证电子邮件地址。
验证电子邮件地址现在被认为是不好的做法(停止使用 regex 验证电子邮件地址),尤其是在您的问题中使用这样的表达式。例如这里有一个更完整的表达式。
至于这个表达式,让我们把它分成几部分:
匹配字符串的开头
^
匹配列表中的至少一个字符
[a-z0-9!#$%&'*+/=?^_`{|}~-]+
可以重复 0..n 次的非捕获(参见反向引用.
)组,匹配 a和列表中的至少一个字符。
(?:\\.[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)
字符串的结尾。
$
^ # 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])?\\.)+
。最后,TLDcom
通过alternation 匹配(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|in|aero|jobs|museum)
。