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效率比其他的用法要高,但是不常用。