private final static String MY_DOUBLE_STR_REGEX = "c.??b";
private final static String MY_DOUBLE_STR = "ccbcb";
public static void main(String[] args) {
System.out.println(simpleTest2());
}
private static String simpleTest2(){
Pattern p = Pattern.compile(MY_DOUBLE_STR_REGEX);
Matcher m = p.matcher(MY_DOUBLE_STR);
    while (m.find()) {
     System.out.println(m.group());
    }
return m.toString();
}为什么第一个输出是
ccb而不是cb呢??

解决方案 »

  1.   

    为什么第一个匹配是ccb(第一到第三个字符)而不是cb(第二到第三个字符)?简单地说,因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权——The match that begins earliest wins。
    lz新人吧,看看这个把,里面有个问题和你是一样的,好好学吧~~
    http://manual.phpv.net/regular_expression.html#howtouse
      

  2.   

    .??是懒惰匹配,它是从字符串的头开始,依次下一个字符来尝试匹配,如果找到就匹配成功,如果没找到,再回退重新查找,所以因为从第一个字符开始查找匹配,能匹配成功了,所以就找到了ccb
      

  3.   

    如果要匹配第二、第三字符开始的cb,这样还真匹配不到了
    直接
    MY_DOUBLE_STR_REGEX = "cb";