Expressão regular para validar email

nome@dominio.algo[.algo2.][algo3.]…

regras:
nome: só pode haver letras (maius/minusc), underline(_), hifen(-) e ponto(.) em qualquer parte do nome.

domínio: mesma regra acima, exceto que não pode possuir pontos

os .com.br.oque_mais_vier são opicionais, mas não podem ter ponto

o email não pode terminar com .

fiz algo do tipo, mas to achando muito grande. como fazer melhor

“[a-zA-Z[-.]]+@[a-zA-Z[-.]]+”
(qualquer caracter de “a” a “z” + “-” + “" + “.” uma ou mais vezes)
@
(qualquer caracter de “a” a “z” + “-” + "
” + “.” uma ou mais vezes)

Com fazer uma amis eficiente???

Ae elvis
Na disciplina de teoria de linguagens teve algo parecido e saiu mais ou menos assim mesmo…
Tipo em forma de gramatica fica assim(sendo ‘alfa’ de a a z LOWER E UPPER):
S -> A@BC
A -> alfa | . | _ | - | A
B -> alfa | B
C -> .B | CC

Acho q eh isso…
Acho q dah pra tirar a derivacao de um e-mail dai…

Abraços

Ah eh…
alfa, ., _ , - sao simbolos terminais…

Legal, é isso mesmo. Só queria saber como ficaria com expressão regular java. Não to conseguindo bloquear o “.” no final da expressão.

Pra bloquear o “.” no final, acho que eh soh mudar a expressao para essa:

“[a-zA-Z[-.]]+@[a-zA-Z[-.]]*[a-zA-Z[-_]]”

Vou testar. Deve funcionar. Tem uma forma mais elegante(expressão regular menor) que resolva o problema?

E aí Galera…
Estou procurando esta expressão regular, mas em XML Schema (XSD).
Eu sei que não é o foco. mas se alguém puder me ajduar!

Abraço