admin管理员组

文章数量:1558087

1.:Greedy(贪婪的)

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


  Pattern p = Patternpile(".{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 = Patternpile(".{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 = Patternpile(".{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效率比其他的用法要高,但是不常用。

本文标签: 区别正则表达式ReluctantgreedyPossessive