您的位置 首页 java

Java正则表达式中的贪婪型、勉强型和占有性

温馨提示,不熟悉 Java 正则表达式的不建议读该文章。等你熟悉正则表达式之后,这篇文章会给你如虎添翼的感觉!

我们来先看一个例子:

在Java中有一个 字符串

 xfooxxxxxxfoo  

分别使用正则表达式”.*foo”、”.*?foo”和”.*+foo”去匹配这个字符串,分别会匹配到什么?

如果你不知道,或者对结果不太确定,那么建议你把这边文章看完。

贪婪型、勉强型和占有型

量词匹配(正则表达式匹配) 的贪婪型、勉强型和占有型:贪婪型属于正常的表示(平时写的那些),勉强型则在后面加个“问号”,占有型加个“加号”,都只作用于前面的问号、星号、加号、大括号,因为前面如果没有这些,就变成普通的问号和加号了(也就是变成贪婪型了)。

贪婪型

贪婪型的匹配原理,一个一个匹配,先一直匹配到最后,发现最后的字符不匹配时, 往前退一格再匹配 ,不匹配时再退一格,递归;

来看看我们文章前面给出的例子,”.*foo”就是典型的贪婪型正则表达式。”.*foo”能匹配上字符串“xfooxxxxxxfoo”的整个字符串。

见下图红框部分:

Java正则表达式中的贪婪型、勉强型和占有性

勉强型

勉强型是匹配到一个字符后看看匹配能否结束,能结束就结束;

来看看我们文章前面给出的例子,”.*?foo”就是典型的贪婪型正则表达式。这个表达式的”.*?”会一个一个字符往后尝试匹配,能匹配上就匹配,匹配不上就停止。因此,”.*?foo”能匹配到字符串“xfooxxxxxxfoo”最前面的四个字符“xfoo”。

见下图红框部分:

Java正则表达式中的贪婪型、勉强型和占有性

占有型

占有型(完全匹配)是从第一个匹配开始,把后面所有字符串读入来匹配,一直匹配到最后,如果最后的字符不匹配的话,那么也不回退,返回 false 结束。如,

Java正则表达式中的贪婪型、勉强型和占有性

这个例子的正则表达式是 占有型 ,所以在寻找匹配时失败。在这种情况下,整个输入的字符串被.*+消耗了,什么都没有剩下来满足表达式末尾的“foo”。因此匹配不上。

跟小编一起来精通Java吧!

文章来源:智云一二三科技

文章标题:Java正则表达式中的贪婪型、勉强型和占有性

文章地址:https://www.zhihuclub.com/197660.shtml

关于作者: 智云科技

热门文章

网站地图