Почему не работает регулярное выражение на поиск цифр в строке?
Есть задача по 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 шт):
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ёЁ\\-]+".