直接看例子
public static void main(String[] args)
{
Pattern p = Pattern.compile("\\d{3,5}");
String s = "123-34345-234-00";
Matcher m = p.matcher(s);//注意,matcher是全局匹配.这里明显是不匹配.但是,由于s里面的"123"和p是匹配的,所以他会将这三个数字去掉.下次调用匹配方法的时候,是将剩余的字符串来继续匹配
p(m.matches());
m.reset();//重新设置到最开始..如果这里没有这一步,下面的匹配将受到影响...
p(m.find());//find方法是部分匹配..也就是说,只要找到有匹配的字符段就算匹配...但是,他和matcher方法一样也会将s里面已经匹配的字符去掉....这里匹配的是"123"
p(m.find());//剩余的字符"-34345-234-00"继续匹配.匹配的是"34345"
p(m.find());//剩余字符"-234-00"继续匹配.匹配的是"234"
p(m.find());//剩余字"-00"符继续匹配.已经没有匹配的字符,所以这个方法不匹配.
p(m.lookingAt());//lookingAt方法也是部分匹配,但是他都是从最开始进行匹配...所以每次都是匹配"123"
p(m.lookingAt());
p(m.lookingAt());
p(m.lookingAt());
}
public static void p(Object o)
{
System.out.println(o);
}
总结一下,matches方法和find方法会造成冲突,记得要调用reset方法...所以使用的时候要特别注意.
还有start和end方法..这两个方法写在find方法后..比如这样
p(m.find());
p(m.start()+"-"+m.end());
p(m.find());
p(m.start()+"-"+m.end());
p(m.find());
p(m.start()+"-"+m.end());
p(m.find());
start方法访问的是开始匹配的问题.注意,end方法返回的是最后匹配位置的下一个位置