import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) throws IOException
{
                  Pattern p = Pattern.compile(".({3,10})[0-9]");  (1)
                  //Pattern p = Pattern.compile("(.{3,10})[0-9]");  (2)
String s = "aaaa5bbbb4";
Matcher m = p.matcher(s);
if(m.find())
p(m.start()+"-"+m.end());
else
p("not match!");
}
public static void p(Object o)
{
System.out.println(o);
}
}
(1)和(2)打输出的结果分别是:3-5和0-10.
请问他们分别表示什么意思,有什么区别呢?

解决方案 »

  1.   

    正则表达式的匹配前提:确保正则表达式能匹配成功所以对于第一个正则  因为{3,10}在括号内,并且前面没有通配符和具体的字符或字符串,只能失效了。所以“.”只能匹配一次,为了能是后面的数字[0-9]能够匹配成功 他只能匹配5前面的a和4前面的b,因此这个正则能匹配a4和b5对于第二个正则 {3,10}和“.”在一起,因此按可以匹配至少3次和最多10次,为了[0-9]能匹配成功,它会优先匹配9次 这样留下最后一个4给[0-9],所以能够匹配整个字符串 也就是aaaa5bbbb4