当前位置:首页 > 开发 > 编程语言 > 正则表达式 > 正文

正则表达式 (.*?) 的含义

发表于: 2013-12-16   作者:darrenzhu   来源:转载   浏览次数:
摘要: 参考以下内容, 来源: 正则表达式30分钟入门教程 http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html 贪婪与懒惰 当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长
参考以下内容,
来源: 正则表达式30分钟入门教程
http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html
贪婪与懒惰

当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。

有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:

a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。

为什么第一个匹配是aab(第一到第三个字符)而不是ab(第二到第三个字符)?简单地说,因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权——The match that begins earliest wins。

表5.懒惰限定符
代码/语法 说明
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复


对于(.*?)要放在实际的应用中才有含义,.*表示的是匹配任意字符,以GET (.*?) HTTP 为例,如果目标位 "GET a/b/index.html HTTP c/hello.jsp HTTP" 那么匹配的文本是 "GET a/b/index.html HTTP", 即匹配最短的,如果将regex改成GET (.*) HTTP则匹配最长的,即 "GET a/b/index.html HTTP c/hello.jsp HTTP"

正则表达式 (.*?) 的含义

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
正则表达式中/i,/g,/ig,/gi,/m的区别和含义 /i (忽略大小写) /g (全文查找出现的所有匹配字符) /m (
互联网之父,今日的W3C director(汗,zhuxi竟然是禁岂词..)Tim Berners-Lee,曾说过,http后面的/
本章讲解如下枚举的如下几个知识点: 1、什么是枚举? 2、枚举是值类型还是引用类型? 3、如何定义
近日,被Control的Invoke和BeginInvoke搞的头大,就查了些相关的资料,整理如下。感谢这篇文章对我的
一个进程在内存中会占5个区域: 1.程序代码区 存放程序代码 2.常量区 一般定义字符串时,内容存放在
xmlns 说明参见 http://www.cnblogs.com/jhxk/articles/1619105.html xsi:schemaLocation说明参见ht
搜了两 个认为好的讲解 Prototype 属性的文章 , 希望会对大伙有一点帮助 . 我们知道 JScript 中对象
搜了两 个认为好的讲解 Prototype 属性的文章 , 希望会对大伙有一点帮助 . 我们知道 JScript 中对象
Linux目录规范和含义(转) Linux目录配置 在了解了每个文件的相关种类与属性,以及了解了如何更改文
常见SVN图标的含义 灰色向右箭头:本地修改过 蓝色向左箭头:SVN上修改过 灰色向右且中间有个加号的箭
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号