`
darrenzhu
  • 浏览: 779462 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多
参考以下内容,
来源: 正则表达式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"
分享到:
评论

相关推荐

    一张图看懂正则表达式.png

    一张图看懂正则表达式,分类详解每个关键字的语法、含义、用法和实例。对学习正则表达式的同学很有用处,也可作为开发人员备查资料保存。

    正则表达式入门经典.[美]Andrew Watt(带详细书签)

    《正则表达式入门经典》详细解释了正则表达式的各个组成部分、这些组成部分的含义、如何使用它们,以及在编写正则表达式时如何避免常见的错误。正则表达式能够帮助用户和开发人员更加有效地查找和操纵文本内容。而且...

    正则表达式中符号含义大全

    正则表达式中符号含义大全

    [正则表达式入门经典].(美)瓦特.扫描版

    本书详细解释了正则表达式的各个组成部分、这些组成部分的含义、如何使用它们,以及在编写正则表达式时如何避免常见的错误。  通过逐章地讲解如何在流行的Windows平台的软件——包括数据库、跨平台的脚本语言和编程...

    解析正则表达式中的.*,.*?,.+?的含义

    主要介绍了解析正则表达式中的.*,.*?,.+?的含义,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    Java 正则表达式

    1、正则表达式的知识要点 1、正则表达式是什么? 正则表达式是一种可以用于模式匹配和替换的强有力的工具。 2、正则表达式的优点? 更少的代码,更高的效率。 3、正则表达式如何使用...2、正则表达式的各种符号及其含义

    C# 最全的日期正则表达式,没有之一

    考虑到这个正则表达式仅仅是用作验证,所以捕获组没有意义,只会占用资源,影响匹配效率,所以可以使用非捕获组来进行优化。 ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2...

    正则表达式,详细描述正则表达式的写法

    正则表达式,详细描述正则表达式的写法,并将各个符号所代表的含义清晰的表现出来

    正则表达式全部符号解释

    正则表达式全部符号解释

    正则表达式各匹配字符含义

    正则表达式匹配字符的含义 主要是. 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 等价于 '[^A-Za-z0-9_]'这类型的匹配等

    正则表达式

    在正则表达式中,许多标点符号都有特殊的含义.下面是这些字符和它们的含义: 正则表达式的直接量字符 字符 匹配 ________________________________ 字母数字字符 自身 \ f 换页符 \ n 换行符 \ r 回车 \ t ...

    方便学习查询的正则表达式小词典

    自己在学习正则表达式过程中,做的一个方便查询表达式含义的小工具。 正则表达式小词典

    python正则用法.docx

    本文将介绍Python正则表达式的基本用法,包括正则表达式的语法、常用的正则表达式模式以及如何在Python中使用正则表达式。 正则表达式的语法 正则表达式是一种特殊的语法,用于描述文本中的模式。在Python中,正则...

    正则表达式教程

    <br>列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。  正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。正则...

    PHP正则(详细).doc

     列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。  正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为...

    正则表达式PPT示例讲解

    正则表达式有自己的简单语言,用于精确描述要匹配的对象,一行表达式代替众多的编码,但表达式创建比较复杂,含义比较含糊,与Perl等成功的语言相同,习惯后,正则表达式将非常容易使用。 正则表达式的知识可能是...

    C语言正则表达式REEC.zip

    REEC是一个精简,高效的C语言正则表达式引擎,它使得C语言开发中支持正则表达式,目前已经进化到了1.2.0版本,可以说无论从功能上,还是效率都到达了很好的应用水平,该引擎除支持常用的正则标准之外,还有一些原创...

    asp.net 2.0 验证控件的正则表达式规则

    主要讲解正则表达式含义、如何使用,方便使用asp.net ajax和asp.net等用户验证控件内容,有点繁琐,但只要掌握其中常用的就行了,网上揭下的,供大家共享,内有验证软件。

    正则表达式30分钟入门教程

    最重要的是——请给我30分钟,如果你没有使用正则表达式的经验,请不要试图在30秒内入门——除非你是超人 :) 别被下面那些复杂的表达式吓倒,只要跟着我一步一步来,你会发现正则表达式其实并没有你想像中的那么困难...

    常用的正则表达式大全(数字、字符、固定格式)

    列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。 构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来...

Global site tag (gtag.js) - Google Analytics