鉴于此类Java
Regex
代码:
Pattern pattern = Pattern.compile("[^(bob)(alice)(kitty)]");
String s = "a";
Matcher matcher = pattern.matcher(s);
boolean bl = matcher.find();
System.out.println(bl);
输出为false
。为什么?正则表达式[^(bob)(alice)(kitty)]
匹配除bob
,alice
或kitty
之外的任何内容。那么结果应该是真的,对吧?
答案 0 :(得分:25)
因为你的正则表达式没有做你认为它应该做的事情。
将此正则表达式与否定前瞻:
一起使用Pattern pattern = Pattern.compile("^(?!bob|alice|kitty).*$");
你的正则表达式:[^(bob)(alice)(kitty)]
正在使用字符类,而在字符类中没有任何组。
(?!bob|alice|kitty)
为负前瞻,即表示匹配失败。^
和$
以确保我们不会从字符串中间匹配时很重要。如果您想避免在输入的任何位置匹配这三个单词,请使用此正则表达式:
^(?!.*?(?:bob|alice|kitty)).*$