Ответ 1
Потому что ваше регулярное выражение не делает то, что, по вашему мнению, должно делать.
Используйте это регулярное выражение с Отрицательным взглядом:
Pattern pattern = Pattern.compile("^(?!bob|alice|kitty).*$");
Ваше регулярное выражение: [^(bob)(alice)(kitty)]
использует класс символов, а внутри класса символов нет групп.
-
(?!bob|alice|kitty)
- отрицательный lookahead, который означает потерю соответствия, если какое-либо из этих трех слов появляется при начале ввода. - Важно использовать привязки
^
и$
, чтобы убедиться, что мы не сопоставляем их с серединой строки. -
Если вы хотите избежать сопоставления этих трех слов в любом месте ввода, используйте это регулярное выражение:
^(?!.*?(?:bob|alice|kitty)).*$