誰かがこの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)$
この正規表現は、電子メール アドレスの検証に使用されます。
電子メールアドレスの検証は、特に質問のような表現では、悪い習慣と見なされるようになりました(正規表現で電子メールアドレスの検証を停止します)。たとえば、より完全な式があります。
この式については、部分的に分割してみましょう。
一致した文字列の先頭
^
リストの少なくとも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)
文字列の終わり。
$
^ # 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)
ます。