Java 模式匹配find vs matches
Java模式匹配中,find与matches有什么区别呢?
find()倾向于搜索,部分匹配。只要部分找到满足正则表达式即可。
matches()倾向于字符串的完整匹配,部分满足条件不可行。
看下面的例子:
public void test1(){
System.out.println("34523452root".matches("^[0-9]+"));
System.out.println("34523452root".matches("^[0-9]+.*"));
System.out.println(Pattern.matches("^[0-9]+","34523452root"));
System.out.println(Pattern.matches("^[0-9]+.*","34523452root"));
}
public void test2(){
String str = "34523452root";
Pattern p = Pattern.compile("(^[0-9]+)(.*)");
//得到匹配器
Matcher m = p.matcher(str);
boolean bFound = m.find();
if(bFound){
System.out.println("group count:" + m.groupCount());
for (int i = 1; i <= m.groupCount(); i++) {
System.out.println(i + ":" + m.group(i));
}
}
}
第一个例子为matchs()方法的测试,包括字符串的匹配方法;第二个例子为find()方法的测试。
输出结果:
false
true
false
true
group count:2
1:34523452
2:root
可以看出,在使用matches()方法的时候,正则表达式除了匹配指定的部分外,如例子test1中,正则表达式除了要包含想要的数字匹配,还要包含对数字匹配外的字符的匹配。
例子test2中,可通过括号来指定分组,在使用find()方法后,就可以取出匹配的分组。
注意:
1、一定要先使用find()方法,然后再使用groupCount()、group(i)等方法,否则会报错。
2、首先要确定找到了,然后再使用1中的方法,即find()返回值为true,否则调用仍然会报错。