贪婪模式与非贪婪模式

Posted Vvvolcano

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贪婪模式与非贪婪模式相关的知识,希望对你有一定的参考价值。

一、概念

1、什么是正则表达式的贪婪与非贪婪匹配

  如:String str="abcaxc";

    Patter p="ab*c";

  贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c)。

  非贪婪匹配:就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab*c)。

  贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。非贪婪模式只被部分NFA引擎所支持。 

2、编程中如何区分两种模式

  默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。

  下面的都是量词:

       {m,n}:m到n个

     *:任意多个

      +:一个到多个

           ?:0或一个

  几个常用的非贪婪匹配Pattern:

  1. *? 重复任意次,但尽可能少重复  
  2. +? 重复1次或更多次,但尽可能少重复  
  3. ?? 重复0次或1次,但尽可能少重复  
  4. {n,m}? 重复n到m次,但尽可能少重复  
  5. {n,}? 重复n次以上,但尽可能少重复  

二、sublime与php的正则表达式之间的差异点

  sublime用的是boost library来实现正则表达式的。sublime用的正则表达式与perl的相同。

 

以上是关于贪婪模式与非贪婪模式的主要内容,如果未能解决你的问题,请参考以下文章

python正则表达式贪婪与非贪婪模式

正则表达式贪婪与非贪婪比较

python正则表达式贪婪算法与非贪婪算法与正则表达式子模式的简单应用

正则表达式:贪婪与非贪婪

全网最易懂的正则表达式教程(8 )- 贪婪模式和非贪婪模式

正则表达式