贪婪模式与非贪婪模式

百般思念 提交于 2020-02-29 17:43:12

一、概念

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的正则表达式之间的差异点

  1、PHP匹配正则可以使用定界符,通常使用 “/”做为定界符开始和结束,也可以使用”#”。如:pattern='/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(:\d+)?(?:[\/\?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?$/i’; 

  2、sublime和PHP一些特殊字符,例如“\w”,所匹配的字符有差异,如下图所示:

   PHP中,“\w”匹配到的只有[A-Za-z0-9_]

   而sublime中,“\w”除了能匹配到[A-Za-z0-9_],还能匹配到俄文字母,例如:α、β等等

      

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!