问题:
public class Question {
public static void main(String[] args) {
String regex="abc";
Pattern p=Pattern.compile("abc[^d]");
Matcher m=p.matcher(regex);
System.out.println(m.find());
}
}
输出false. why ??????
解析: [^d] 总是要匹配至少一个字符。
解决办法:
负向零宽断言。只匹配一个位置,并不消费任何字符。
零宽度负预测先行断言 (?!exp) ,断言此位置的后面不能匹配表达式exp.
例子中,可以修改为
Pattern p=Pattern.compile("abc(?!d)");
错误解决方式代码段:
// * 重复0-n次 ? 重复0-1次
// 此时,[^d]匹配模式,可以不出现。
// 当regex="abcd"时,将输出"true"。不满足
Pattern p=Pattern.compile("abc[^d]*?");