Java正则表达式中量词贪婪型,勉强型,占有型简单描述

今天看《Thinking In java》正则表达式这一节量词有讲到量词特意写了一篇博客来总结。

量词的意思是:描述了一个模式吸入输入文本的方式

  • 贪婪型 :java正则表达式默认匹配是贪婪型,就是原始表达式(x?),会 为所有可能的模式发现尽可能多的匹配。
Matcher m = Pattern.compile("x+")
				.matcher("xxxxxx");
		if(m.find())
			System.out.println(m.group());
/*Oputput:
xxxxxx
*/
  • 勉强型 :原始表达式后边加个?号(x+?),会匹配满足模式所需的最少字符数。
Matcher m = Pattern.compile("x+?")
				.matcher("xxxxxx");
		if(m.find())
			System.out.println(m.group());

/*Output:
x
*/	
  • 占有型 :原始表达式后边加个+号(x++), 当正则表达式被应用于字符串时,他会产生相当多的状态,以便匹配失败时可以回溯。而“占有型”量词不会保存这些中间状态,因此他们可以防止回溯。他们常常用于防止正则表达式失败,因此可以使用正则表达式起来更加有效。
	Matcher m = Pattern.compile("\\d+\\d")     //  \\d+都匹配到了3 6 0 3,遇到空格就无法匹配了,可是后面的\\d就无法匹配了,他就回溯,最终让后一个\\d匹配3 6 0 3
				.matcher("123 456 78910 111213");
		while(m.find())
			System.out.println(m.group());
		
		System.out.println("----------------------------------------");
		
		Matcher m2 = Pattern.compile("\\d++\\d")     //  但是占有型则不,它不回溯,也就一个也匹配不成了。
				.matcher("123 456 78910 111213");
		while(m2.find())
			System.out.println(m2.group());
	}
/*Output:
123
456
78910
111213
----------------------------------------
*/	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值