0

誰かがこの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)$

この正規表現は、電子メール アドレスの検証に使用されます。

4

2 に答える 2

12

電子メールアドレスの検証は、特に質問のような表現では、悪い習慣と見なされるようになりました(正規表現で電子メールアドレスの検証を停止します)。たとえば、より完全な式があります。

この式については、部分的に分割してみましょう。

一致した文字列の先頭

^

リストの少なくとも1文字に一致します

[a-z0-9!#$%&'*+/=?^_`{|}~-]+

0..n回繰り返すことができ、リストのaと少なくとも1つの文字に一致する非キャプチャ(後方参照を参照)グループ。.

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

このキャラクターだけ

@

[a-z0-9]このリストの1つの文字に一致し、場合によっては次のリストのさらに多くの文字に一致する非キャプチャグループ。一致する文字列は[a-z0-9]で開始および終了する必要があり、その中に[a-z0-9-]を含めることができます。

(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+

2つの大文字または1つの単語に一致する非キャプチャグループ。

(?:[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は交互に一致し(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|in|aero|jobs|museum)ます。

于 2012-09-16T17:25:09.527 に答える