正则表达式的三种模式

来源:互联网 发布:女娲出装 知乎 编辑:程序博客网 时间:2024/05/13 14:52

正则表达式的匹配有三种模式:

  • Greedy(贪婪的)
  • Reluctant(不情愿的)
  • Possessive(独占的)
这三种模式的名字起得非常的巧妙,分别来看一下:

Greedy:

Pattern p = Pattern.compile("(.{3,10})([0-9])");
String s = "aaaa5bbbb6";
Matcher m = p.matcher(s);

这种模式匹配的结果是“aaaa5bbbb6”,因为“贪婪的”会首先选择最大范围,即匹配10个字符

匹配不成功,然后吐出最后一个字符,再次匹配成功。


Reluctant:

Pattern p = Pattern.compile("(.{3,10}?)([0-9])");
String s = "aaaa5bbbb6";
Matcher m = p.matcher(s);

匹配的结果变成了"aaaa5",因为“不情愿的”会首先选择最小的范围,即匹配3个字符

匹配不成功会继续吃进下一个字符,直至匹配成功。


Possessive:

Pattern p = Pattern.compile("(.{3,10}+)([0-9])");
String s = "aaaa5bbbb6";
Matcher m = p.matcher(s);

这时匹配不成功,因为独占模式更霸道!只选择吃进10个字符,而不会选择吐出字符!

0 0
原创粉丝点击