<script>

try{
str="<p>abcdefg</p><p>abcdefghijkl</p>";

re1=str.match(/<p>[\W\w]+?<\/p>/ig);
alert("非贪婪模式:\r\n\r\n1:"+re1[0]+"\r\n2:"+re1[1]);

re1=str.match(/<p>[\W\w]+<\/p>/ig);
alert("贪婪模式:\r\n\r\n"+re1);

re1=str.match(/<p>(.+?)<\/p>/i);
alert("非贪婪模式,且不要标记:\r\n\r\n1:"+re1[1]);

re1=str.match(/<p>(.+)<\/p>/i);
alert("贪婪模式,且不要标记:\r\n\r\n"+re1[1]);
}catch(e){alert(e.description)}
</script>

 匹配次数中的贪婪与非贪婪

在使用修饰匹配次数的特殊符号时,有几种表示方法可以使同一个表达式能够匹配不同的次数,比如:"{m,n}", "{m,}", "?", "*", "+",具体匹配的次数随被匹配的字符串而定。这种重复匹配不定次数的表达式在匹配过程中,总是尽可能多的匹配。比如,针对文本 "dxxxdxxxd",举例如下:

表达式

匹配结果

(d)(\w+)

"\w+" 将匹配第一个 "d" 之后的所有字符 "xxxdxxxd"

(d)(\w+)(d)

"\w+" 将匹配第一个 "d" 和最后一个 "d" 之间的所有字符 "xxxdxxx"。虽然 "\w+" 也能够匹配上最后一个 "d",但是为了使整个表达式匹配成功,"\w+" 可以 "让出" 它本来能够匹配的最后一个 "d"

由此可见,"\w+" 在匹配的时候,总是尽可能多的匹配符合它规则的字符。虽然第二个举例中,它没有匹配最后一个 "d",但那也是为了让整个表达式能够匹配成功。同理,带 "*" 和 "{m,n}" 的表达式都是尽可能地多匹配,带 "?" 的表达式在可匹配可不匹配的时候,也是尽可能的 "要匹配"。这 种匹配原则就叫作 "贪婪" 模式 。

非贪婪模式:

在修饰匹配次数的特殊符号后再加上一个 "?" 号,则可以使匹配次数不定的表达式尽可能少的匹配,使可匹配可不匹配的表达式,尽可能的 "不匹配"。这种匹配原则叫作 "非贪婪" 模式,也叫作 "勉强" 模式。如果少匹配就会导致整个表达式匹配失败的时候,与贪婪模式类似,非贪婪模式会最小限度的再匹配一些,以使整个表达式匹配成功。举例如下,针对文本 "dxxxdxxxd" 举例:

表达式

匹配结果

(d)(\w+?)

"\w+?" 将尽可能少的匹配第一个 "d" 之后的字符,结果是:"\w+?" 只匹配了一个 "x"

(d)(\w+?)(d)

为了让整个表达式匹配成功,"\w+?" 不得不匹配 "xxx" 才可以让后边的 "d" 匹配,从而使整个表达式匹配成功。因此,结果是:"\w+?" 匹配 "xxx"

更多的情况,举例如下:

举例1:表达式 "<td>(.*)</td>" 与字符串 "<td><p>aa</p></td> <td><p>bb</p></td>" 匹配时,匹配的结果是:成功;匹配到的内容是 "<td><p>aa</p></td> <td><p>bb</p></td>" 整个字符串, 表达式中的 "</td>" 将与字符串中最后一个 "</td>" 匹配。

举例2:相比之下,表达式 "<td>(.*?)</td>" 匹配举例1中同样的字符串时,将只得到 "<td><p>aa</p></td>", 再次匹配下一个时,可以得到第二个 "<td><p>bb</p></td>"。

转载于:https://www.cnblogs.com/hejia/archive/2013/04/13/3017877.html

正则表达式的贪婪与非贪婪模式相关推荐

  1. 正则表达式贪婪与非贪婪模式

    正则表达式贪婪与非贪婪模式 之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意. 1.什么是正则表达式的贪婪与非贪婪匹配 如:Stri ...

  2. 正则表达式之 贪婪与非贪婪模式详解

    1 概述 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配.非贪婪模式只被部分NF ...

  3. 转:正则表达式之 贪婪与非贪婪模式详解

    1 概述 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配.非贪婪模式只被部分NF ...

  4. 关于正则表达式的贪婪与非贪婪模式 - A JavaScript Fancier - IT博客网

    以前看正则表达式,但没有注意到正则表达式的贪婪与非贪婪模式,今天在经典上看到了这么段代码: <script> try{ str=" abcdefg abcdefghijkl &q ...

  5. 94. 正则表达式贪婪与非贪婪模式的区别?

    正则表达式,爬虫地时候用的比较多吧,暂时还没有接触过写爬虫地代码,先放下 写好正则表达式也是个不容易的事啊 1.什么是正则表达式的贪婪与非贪婪匹配 如:String str="abcaxc& ...

  6. java正则表达式非贪婪_正则表达式贪婪与非贪婪模式(示例代码)

    之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意. 1.什么是正则表达式的贪婪与非贪婪匹配 如:String str="a ...

  7. 正则表达式(四)——贪婪与非贪婪模式

    高级用法在这里:正则表达式(三)--高级用法:search,findall,sub,split 8.贪婪与非贪婪模式 首先我们以简单的例子来说说什么是正则表达式的贪婪与非贪婪匹配? 比如假定匹配字符串 ...

  8. 正则表达式的贪婪和非贪婪模式

    最近在写程序时,碰到一个场景,需要找到一个字符串中指定的一个片段,而不是所有片段,这就涉及到正则表达式中贪婪和非贪婪两种模式. 字面意思上,正则表达式一般趋向于最大长度匹配,就是贪婪模式.匹配到结果就 ...

  9. 正则表达式口诀及常用正则 。正则贪婪与非贪婪模式

    正则表达式口诀及常用正则 签于网上太多的介绍都是一篇凶悍的短文,边看边理解可以,帮助记忆不行.又受五笔字型字根表口诀"白手看头三二斤..."的启发,  试作"正则表达式助 ...

  10. java正则表达式非贪婪_正则表达式中的贪婪与非贪婪匹配模式

    1.首先看看下面的例子: try{ str=" abcdefg abcdefghijkl "; re1=str.match(/ [\W\w]+?/ig); alert(" ...

最新文章

  1. CentOS7 打包RPM 升级OpenSSH8.3
  2. This Gradle plugin requires Studio 3.0 minimum
  3. 转换汉字为unicode形式的字符串和转换unicode形式字符串转换成汉字
  4. linux dd命令参数及用法详解---用指定大小的块拷贝一个文件
  5. linux 文件及目录结构体系
  6. SAP Fiori Elements 在本地测试模式下如何修改 List Report 里字段标签和图标
  7. oracle添加文件,ORACLE---添加控制文件
  8. 用VS2005开发WinCE程序调试图文教程
  9. CryptoHelper HMAC/X509/RSA/TripleDes/Hash/MD5/SHA1 (Release 3)
  10. linux查找指定修改时间的文件夹,linux 查找某个日期以后修改过哪些文件 shell脚本...
  11. 堆栈的缓冲区溢出进不了系统_一文理解缓冲区溢出
  12. iPhone发展【一】从HelloWorld开始
  13. eclips断点调试
  14. php 公用方法,Laravel配置全局公共函数的方法步骤
  15. ER-X刷回原版固件方法(救砖)
  16. Iframe的allow属性生效时机
  17. 如何配置服务器的内网IP以及MTU
  18. 投稿英文国际会议论文经验总结
  19. Linux man中文手册的安装与使用
  20. 用project做项目计划之 项目成本、预算、基线工期、基线成本、基线时间

热门文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(45)-工作流设计-设计步骤
  2. 利用mysql5.6 的st_distance 实现按照距离远近排序。 (转载)
  3. 双十一虽过,李宁老师视频课程优惠仍将继续
  4. Scala学习(六)练习
  5. AsyncTask 很好
  6. 对于vsftp writable anonymous root问题的解决
  7. 对Moss 2007中访问群体的设置和使用补充
  8. MariaDB 10.0.X中,动态列支持 JSON 格式来获取数据
  9. Weblogic ./startWebLogic.sh Error 解决
  10. ubuntu或者fedora下编译淘宝tair key-value-db的开源内存数据库