"[a-zA-Z0-9]+[.[a-zA-Z0-9_-]+]*@[a-z0-9][\\w\\.-]*[a-z0-9]\\.[a-z][a-z\\.]*[a-z]$"
Esta puede tener algún fallo: "[a-zA-Z0-9]+[.[a-zA-Z0-9_-]+]*@[a-zA-Z0-9_]+[.[a-zA-Z]+]+"
También esta otra: [a-zA-Z0-9][a-zA-Z0-9_-]+[\\p{Punct}[a-zA-Z0-9_-]+]*@[a-zA-Z0-9_]+[\\{Punct}[a-zA-Z]+]+
También hay dos metodos para validar por separado, uno para la parte izquierda del email y otro para la derecha derecha del email.
Código
import java.util.regex.*; import java.util.StringTokenizer; public class Main { Pattern p = Pattern.compile("[a-zA-Z0-9]+[.[a-zA-Z0-9_-]+]*@[a-z0-9][\\w\\.-]*[a-z0-9]\\.[a-z][a-z\\.]*[a-z]$");//me gusta esta Matcher m = p.matcher(email); return m.matches(); } Pattern p = Pattern.compile("[a-zA-Z0-9]+[.[a-zA-Z0-9_-]+]*"); Matcher m = p.matcher(emailLeft); return m.matches(); } Pattern p = Pattern.compile("[a-z0-9][\\w\\.-]*[a-z0-9]\\.[a-z][a-z\\.]*[a-z]$"); Matcher m = p.matcher(emailRight); return m.matches(); } Main miMain = new Main(); System.out.println("*****************************validateEmail******************************************"); System.out.println("email: " + "example@cs.uns.edu.ar " + miMain.validateEmail("example@cs.uns.edu.ar")); System.out.println("email: " + "name-surname@computer_name.net_name.com " + miMain.validateEmail("name-surname@computer_name.net_name.com")); System.out.println("email: " + "name-sur#name@computer_name.net_name.com " + miMain.validateEmail("name-sur#name@computer_name.net_name.com")); System.out.println("email: " + "name-surname@comp#uter_name.net_name.com " + miMain.validateEmail("name-surname@comp#uter_name.net_name.com")); System.out.println("email: " + "name-surname@computer_name.net_na#me.com " + miMain.validateEmail("name-surname@computer_name.net_na#me.com")); System.out.println("email: " + "a-_-_.-_b--d__-@h.c.dd " + miMain.validateEmail("a-_-_.-_b--d__-@h.c.dd")); System.out.println("*****************************validateRightEmail******************************************"); System.out.println("email: " + "computer_name.net_name.com " + miMain.validateRightEmail("computer_name.net_name.com")); System.out.println("email: " + "comp#uter_name.net_name.com " + miMain.validateRightEmail("comp#uter_name.net_name.com")); System.out.println("email: " + "computer_name.net_na#me.com " + miMain.validateRightEmail("computer_name.net_na#me.com")); System.out.println("*****************************validateLeftEmail******************************************"); } }