Может удалить обратную косую черту из вашего выражения:
"[A-Za-z]+-[A-Za-z]+"
Тогда должен работать следующий код
Pattern pattern = Pattern.compile("[A-Za-z]+-[A-Za-z]+");
Matcher matcher = pattern.matcher("aaa-bbb");
match = matcher.matches();
Обратите внимание, что вы можете использовать Matcher.matches()
вместо Matcher.find()
для проверки совпадения всей строки.
Если вместо этого вы хотите заглянуть внутрь строки, используя Matcher.find()
, вы можете использовать выражение
"(^|\\s)[A-Za-z]+-[A-Za-z]+(\\s|$)"
, нообратите внимание, что тогда будут найдены только слова, разделенные пробелами (т.е. нет слов вроде aaa-bbb.
).Чтобы запечатлеть также этот случай, вы можете использовать lookbehinds и lookaheads:
"(?<![A-Za-z-])[A-Za-z]+-[A-Za-z]+(?![A-Za-z-])"
, который будет читать
(?<![A-Za-z-]) // before the match there must not be and A-Z or -
[A-Za-z]+ // the match itself consists of one or more A-Z
- // followed by a -
[A-Za-z]+ // followed by one or more A-Z
(?![A-Za-z-]) // but afterwards not by any A-Z or -
Пример:
Pattern pattern = Pattern.compile("(?<![A-Za-z-])[A-Za-z]+-[A-Za-z]+(?![A-Za-z-])");
Matcher matcher = pattern.matcher("It is home-made.");
if (matcher.find()) {
System.out.println(matcher.group()); // => home-made
}