Pattern p = Pattern.compile(".{3,10}+[0-9]");
String s = "aaaa5bbbb6";
Matcher m = p.matcher(s);
if(m.find())
System.out.println(m.start() + "-" + m.end());
else 
System.out.println("not match!");
--------------------------
输出结果: not match
为什么是不匹配?

解决方案 »

  1.   

    .{3,10}+
    表示,尽量多的匹配,但不超过10,一旦匹配了,不会回赎,所以,它匹配了,整个词语,即aaaa5bbbb6
    这里刚才有10个字符,而[0-9]就没有可以被匹配的字符了,所以返回为false
      

  2.   

    Pattern p = Pattern.compile(".{3,10}+[0-9]");
    意思是    .{3,10}+     3到10个不超过10个任何字符,
               [0-9]        一个数字
    String s = "aaaa5bbbb6";
    编译器 会截取最大范围的,所以节了10个任意字符,因为aaaa5bbbb6一共就10个,再截取一个数字的时候就找不到了,所以 NOT match 我也是运行了一下才知道的