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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值