鉴于此类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);
Run Code Online (Sandbox Code Playgroud)
输出是false.为什么?正则表达式[^(bob)(alice)(kitty)]的任何东西匹配除bob,alice或kitty.那么结果应该是真的吧?
anu*_*ava 26
因为你的正则表达式没有做你认为它应该做的事情.
将此正则表达式与否定前瞻一起使用:
Pattern pattern = Pattern.compile("^(?!bob|alice|kitty).*$");
Run Code Online (Sandbox Code Playgroud)
你的正则表达式:[^(bob)(alice)(kitty)]正在使用一个字符类,在一个字符类中没有组.
(?!bob|alice|kitty) 如果在输入开始时出现这三个单词中的任何一个,则表示负面预测意味着失败.^并$确保我们不匹配字符串的中间位置.如果你想避免在输入的任何地方匹配这三个单词,那么使用这个正则表达式:
^(?!.*?(?:bob|alice|kitty)).*$
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
21144 次 |
| 最近记录: |