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,否则调用仍然会报错。

posted @ 2017-09-11 16:52  hongweigg  阅读(43)  评论(0编辑  收藏  举报