正则表达式:Greedy、Reluctant、Possessive 区别

1.:Greedy(贪婪的)

X?X,一次或一次也没有
X*X,零次或多次
X+X,一次或多次
X{n}X,恰好 n
X{n,}X,至少 n
X{n,m}X,至少 n 次,但是不超过 m


  Pattern p = Pattern.compile(".{3,10}[0-9]");
  String s = "aaaa5bbbb6";
  Matcher m = p.matcher(s);
  if(m.find())
   p(m.start() + "-" + m.end());
  else
   p("not match!");

输出:0-10

解释:Greedy对这个表达式 {3,10}吞入最多字符(10个字符)把10个字符匹配。吞入的字符为:aaaa5bbbb6 吞入之后后面的[0-9]发现没有匹配的吐出最后一个字符看是数字结果匹配。

 

2:Reluctant(勉强的)

X??X,一次或一次也没有
X*?X,零次或多次
X+?X,一次或多次
X{n}?X,恰好 n
X{n,}?X,至少 n
X{n,m}?X,至少 n 次,但是不超过 m

  Pattern p = Pattern.compile(".{3,10}?[0-9]");
  String s = "aaaa5bbbb6";
  Matcher m = p.matcher(s);
  if(m.find())
   p(m.start() + "-" + m.end());
  else
   p("not match!");

输出:0-5

解释:Reluctant和Greedy相反对,这个表达式{3,10}的吞入最少字符(3个字符)把3个字符匹配。吞入的字符为:aaa 吞入之后后面的[0-9]发现没有匹配的吞入直到吞入5个字符匹配(aaaa5)。

3:Possessive(独占的)

X?+X,一次或一次也没有
X*+X,零次或多次
X++X,一次或多次
X{n}+X,恰好 n
X{n,}+X,至少 n
X{n,m}+X,至少 n 次,但是不超过 m

  Pattern p = Pattern.compile(".{3,10}+[0-9]");
  String s = "aaaa5bbbb6";
  Matcher m = p.matcher(s);
  if(m.find())
   p(m.start() + "-" + m.end());
  else
   p("not match!");

输出:not match!

解释:Possessive和Greedy类似的{3,10}的吞入最多字符(10个字符)把10个字符匹配。但是没发现匹配以上正则表达式,和Greedy区别就是不吐了。所以返回not match!

可以看出Possessive效率比其他的用法要高,但是不常用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值