正则的贪婪和非贪婪

最近在弄网站的一个需求,要用到正则。顺便学习下,对贪婪和非贪婪看了半天才看懂,这里举个例子帮助自己理解下。

正则表达式模式是匹配贪婪的,也就是匹配尽可能多的。

比如字符串是aaaaa,正则是a{1,3}

则会匹配到2处,第一个是aaa,第二个是aa

如果想非贪婪匹配的话,正则是a{1,3}?

则会匹配5处,分别都是a

 

看一个java的正则的例子:

Pattern a = Pattern.compile("^1234\\d*?");
Matcher matcher = a.matcher("12341");
System.out.println(matcher.matches());

//you can use below codes with more simple
"12341".matches("^1234\\d*?").matches();

 

 

在java中正则有3种,贪婪型,勉强型(对应非贪婪型),占有型(java特有的)。

在Think in java中,对占有型的介绍是当正则表达式被应用于字符串时,它会产生相当多的状态,以便在匹配失败时可以回溯。而“占有的”量词并不保存这些中间状态,因此它们可以防止回溯。

一般是在表达式后面添加+ ,比如x{n,m}+,有点看不懂这个占有型。有大神可以给解释下吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值