0

有人可以向我解释这个 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)$

此正则表达式用于验证电子邮件地址

4

2 回答 2

12

验证电子邮件地址现在被认为是不好的做法(停止使用 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)

字符串的结尾。

$
于 2012-09-16T17:25:39.727 回答
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])?\\.)+。最后,TLDcom通过alternation 匹配(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|in|aero|jobs|museum)

于 2012-09-16T17:25:09.527 回答