Почему не работает регулярное выражение на поиск цифр в строке?

Есть задача по Java: вводится ФИО из трех слов на кириллице, надо их вывести на отдельных строках. Решить надо с помощью регулярных выражений. В строке не должно быть ничего кроме букв кириллицы, дефисов и двух пробелов. Я пробовал

String input = scanner.nextLine();
boolean matches = false;
Pattern pattern = Pattern.compile("[^ а-яА-ЯёЁ\\-]+");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
    matches = true;
}

и пробовал

boolean matches = input.matches("[^ а-яА-ЯёЁ\\-]+");

И при вводе "111 222 333" - matches=false. Что надо написать, чтобы оно работало? На regex101.com данное выражение работает, разница только в экранировании символов - [^а-яА-ЯёЁ\s\-]


Ответы (2 шт):

Автор решения: AlekseiGaile
public class Main {
    public static void main(String[] args) {
        String input = "111 222 333";
        List<String> stream = Stream.of(input.split(" ")).collect(Collectors.toList());
        
        stream.forEach(System.out::println);
    }
}
→ Ссылка
Автор решения: Алексей Ковальчук

Символ ^ в начале блока [] в регулярном выражении создает отрицание. Т.е. вы сделали в точности да наоборот, правильное выражение "[ а-яА-ЯёЁ\\-]+".

Советую сайт, на котором легко проверять регулярные выражения без длительной компиляции https://regex101.com/

Помимо этого, вы тестируете строку 111 222 333. Чтобы сделать поддержку цифр в том числе, нужно еще добавить 0-9 диапазон в блок [], в таком случае регулярное выражение будет выглядеть так "[ а-яА-Я0-9ёЁ\\-]+".

→ Ссылка