Java Regex匹配除三个特定字符串之外的任何内容

时间:2014-12-11 16:12:58

标签: java regex

鉴于此类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)]匹配除bobalicekitty之外的任何内容。那么结果应该是真的,对吧?

1 个答案:

答案 0 :(得分:25)

因为你的正则表达式没有做你认为它应该做的事情。

将此正则表达式与否定前瞻

一起使用
Pattern pattern = Pattern.compile("^(?!bob|alice|kitty).*$");

你的正则表达式:[^(bob)(alice)(kitty)]正在使用字符类,而在字符类中没有任何组。

    如果在输入开始时出现这3个单词中的任何一个,则
  • (?!bob|alice|kitty)为负前瞻,即表示匹配失败。
  • 使用主播^$以确保我们不会从字符串中间匹配时很重要。
  • 如果您想避免在输入的任何位置匹配这三个单词,请使用此正则表达式:

    ^(?!.*?(?:bob|alice|kitty)).*$
    

RegEx Demo