Ваше выражение не утверждает, что оно должно соответствовать всему вводу, и поэтому я предполагаю, что в пределах my.name-here@m@y.domain-here.ext
Apache Regexp соответствует части m@y.domain-here.ext
(хотя я не знаю Apache RegexP так хорошо, и он удален, кстати).
Оберните свое регулярное выражение с помощью ^ и $, чтобы оно соответствовало всему вводу.
Из JavaDoc на Matcher#matches()
(Pattern.matches(...)
вызывает этот метод, как вы можете видеть из его JavaDoc):
Попытки сопоставить всю область с шаблоном
Редактировать
Я только что проверил вашувыражением в апплете RegexP, и кажется, что вы должны экранировать литерал -
в ваших классах персонажей (что в любом случае является хорошей практикой).Это выражение работает в RegexP:
"^[\\w\\-]+(\\.[\\w\\-]+)*@[\\w\\-]+(\\.[\\w\\-]+)*(\\.)[a-zA-Z]+$"
Кстати, вы можете добавить группы без захвата, чтобы немного оптимизировать выражение, то есть вместо (\\.)
вы бы написали (?:\\.)
и т. Д.