^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,70})\.([A-Za-z]{2,5}(?:\.[A-Za-z]{2,5})?)$
^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,70})\.([A-Za-z]{2,5}(?:\.[A-Za-z]{2,5})?)$
Obrigado, Roberto!
Parabéns! Ficou muito bom! :D
Queria ter mandado a explicação de cada parte mas ficou com formatação confusa daí não enviei. Então vou mandar novamente.
^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,70})\.([A-Za-z]{2,5}(?:\.[A-Za-z]{2,5})?)$
Explicação da expressão:
1) - ^( [\w-]+(?:\.[\w-]+)*)
a) ^( : Cria um grupo informando que tudo ocorrerá no início, antes do "@", indicado pela âncora "^".
b) [\w-]+
[ : Cria uma classe
\w- : Formada por qualquer letra, maiúscula ou minúscula, ou qualquer número, indicado pelo atalho "\w", e o hífen
]+ : Fecha a classe informando que ocorre uma ou mais vezes, indicado pelo quantifier "+"
c) (?:\.[\w-]+)*
(?: : Cria outro grupo porém devido ao uso do non-capturing groups "?:" não será mostrado como grupo
\. : Um ponto
[ : Cria uma classe
\w- : Formada por qualquer letra, maiúscula ou minúscula, ou qualquer número, indicado pelo atalho "\w", e o hífen
]+ : Fecha a classe informando que ocorre uma ou mais vezes, indicado pelo quantifier "+"
)* : Fecha o grupo formando por "b" e "c" informando que tudo nele poderá ocorrer nenhuma ou mais vezes, indicado pelo quantifier "*".
d) ) : Fecha o grupo
2) - @
O caractere @
3) ((?:[\w-]+\.)*\w[\w-]{0,70})\.([A-Za-z]{2,5}(?:\.[A-Za-z]{2,5})?)$
a) ( : Cria um grupo
b) (?:[\w-]+\.)*
(?: : Cria outro grupo porém devido ao uso do non-capturing groups "?:" não será mostrado como grupo
[ : Cria uma classe
\w- : Formada por qualquer letra, maiúscula ou minúscula, ou qualquer número, indicado pelo atalho "\w", e o hífen
]+ : Fecha a classe informando que ocorre uma ou mais vezes, indicado pelo quantifier "+"
\. : Um ponto
)* : Fecha o grupo informando que tudo nele poderá ocorrer nenhuma ou mais vezes, indicado pelo quantifier "*".
c) \w[\w-]{0,70}
\w : Qualquer letra, maiúscula ou minúscula, ou qualquer número
[ : Cria uma classe
\w- : Formada por qualquer letra, maiúscula ou minúscula, ou qualquer número, indicado pelo atalho "\w", e o hífen
]{0,70} : Fecha a classe informando que ocorre no mínimo 0 e no máximo setenta vezes, indicado pelo quantifier "{0,70}"
d) )* : Fecha o grupo formando por "b" e "c" informando que tudo nele poderá ocorrer nenhuma ou mais vezes, indicado pelo quantifier "*".
e) \. : Um ponto
([A-Za-z]{2,5}(?:\.[A-Za-z]{2,5})?)$
f) ( : Cria um grupo
g) [A-Za-z]{2,5}
[ : Cria uma classe
A-Za-z: Formada por qualquer letra, maiúscula ou minúscula
]{2,5} : Fecha a classe informando que ocorre no mínimo 2 e no máximo 5 vezes, indicado pelo quantifier "{2,5}"
h) (?:\.[A-Za-z]{2,5})?
(?: : Cria outro grupo porém devido ao uso do non-capturing groups "?:" não será mostrado como grupo
\. : Um ponto
[ : Cria uma classe
A-Za-z: Formada por qualquer letra, maiúscula ou minúscula
]{2,5} : Fecha a classe informando que ocorre no mínimo 2 e no máximo 5 vezes, indicado pelo quantifier "{2,5}"
)? : Fecha o grupo informando que tudo nele poderá ocorrer nenhuma ou uma vez, ou seja, opcional, indicado pelo quantifier "?".
i) )$ : Fecha o grupo formando por "f", "g" e "h" informando que tudo ocorrerá no final, indicado pela âncora "$".
Excelente! Muito obrigado!