Шаблон регулярного выражения Java (?i)[-a-z0-9+_][-a-z0-9+_.]*@[-a-z0-9][-a-z0-9.]*\\.[a-z]{2,6}
должен быть достаточным. Вот что означает шаблон:
(?i) # Case insensitive flag
[-a-z0-9+_] # First character
[-a-z0-9+_.]* # Zero or more characters
@ # Literal '@' character
[-a-z0-9] # Match a single character
[-a-z0-9.]* # Match zero or more characters
\. # Literal '.' character
[a-z]{2,6} # Match 2 through 6 alpha characters
Следующий тестовый код ...
final String ps =
"(?i)[-a-z0-9+_][-a-z0-9+_.]*@[-a-z0-9][-a-z0-9.]*\\.[a-z]{2,6}";
final Pattern p = Pattern.compile(ps);
for (String s : new String[] {"foo@bar.COM", "+foo@bar.COM",
"-foo@bar.COM", "fo_o@bar.COM", "f.oo@bar.COM", "a@b.cdefgh",
"3@4.com", "3@4.5.6-7.8.com", ".foo@bar.com", "a@b.cdefghi",
"闪闪发光@闪闪发光.com"})
{
final Matcher m = p.matcher(s);
if (m.matches()) {
System.out.println("Success: " + s);
} else {
System.out.println("Fail: " + s);
}
}
... выведет:
Success: foo@bar.COM
Success: +foo@bar.COM
Success: -foo@bar.COM
Success: fo_o@bar.COM
Success: f.oo@bar.COM
Success: a@b.cdefgh
Success: 3@4.com
Success: 3@4.5.6-7.8.com
Fail: .foo@bar.com
Fail: a@b.cdefghi
Fail: 闪闪发光@闪闪发光.com
Используя метод Matcher.matches()
, вам не нужно включать конструкции сопоставления границ конца строки ^
или $
, так как Matcher.matches()
будет соответствовать всей строке.