`
darrenzhu
  • 浏览: 804348 次
  • 性别: 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"
分享到:
评论

相关推荐

    正则表达式.rar正则表达式.rar正则表达式.rar正则表达式.rar正则表达式.rar

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索、替换操作。在编程语言中,正则表达式(Regular Expression)被广泛应用于数据验证、文本提取、数据清洗等多个领域。它们通过使用特定的语法...

    正则表达式.rar 正则表达式.rar

    正则表达式,简称为正则或regex,是一种强大的文本处理工具,用于匹配、查找、替换和处理字符串。它在编程、数据验证、文本编辑器等多个领域广泛应用,是IT行业中不可或缺的基础知识。 正则表达式的基本概念: 1. *...

    JAVA的正则表达式.doc

    如 "[0-9]{3}—[0-9]{2}—[0-9]{3}" 可以匹配 "999—99—999",其中 "—" 需要转义为 `\—`,因为它在正则表达式中有特殊含义。 5. **^ 符号**:在方括号内,`^` 表示否定,即不想匹配的字符。例如,`[^x]` 表示第...

    正则表达式.txt,正则表达式.txt

    3. **转义字符**:某些字符在正则表达式中有特殊含义,如果想匹配这些字符本身,需要使用转义字符 `\[character]`。 #### 四、正则表达式在 Java 中的应用 在 Java 中,正则表达式的使用主要依赖于 `java.util....

    正则表达式.zip

    1. **元字符**:正则表达式中的元字符具有特殊的含义,如`.`代表任意单个字符,`^`表示行的开始,`$`表示行的结束,`\d`代表数字,`\D`代表非数字,`\s`代表空白字符,`\S`代表非空白字符,`\w`代表单词字符(字母、...

    正则表达式.docx

    ### 正则表达式基础知识详解 #### 一、正则表达式概述 正则表达式是一种强大的文本处理工具,能够帮助我们实现对字符串的搜索、替换等...理解“\b”的含义及其在不同环境下的表现对于编写高效的正则表达式至关重要。

    正则表达式30分钟入门教程-附常用表达式.chm

    `, `{}`, `[]`, `\` 等,它们在正则表达式中有特殊含义。 - **量词**:`*`, `+`, `?`, `{n}`, `{n,}` 和 `{n,m}` 分别表示零个或多个、一个或多个、零个或一个、精确n次、至少n次以及n到m次的匹配。 2. **字符类**...

    最全最好用的正则表达式.zip

    ', '{', '}', '[', ']', '\\'等,它们在正则表达式中有特殊含义。例如,'.'代表任意单个字符,'^'表示行首,'$'表示行尾。 3. **量词**:'*', '+', '?' 和 '{m,n}' 控制前一个字符或字符组的重复次数。'*'表示零次...

    正则表达式.chm(电子书帮助文档)

    3. **特殊字符与转义**:许多字符在正则表达式中有特殊含义,如`.`代表任意字符,`^`表示行首,`$`表示行尾。若要匹配这些特殊字符本身,需要使用反斜杠`\`进行转义,如`\.`匹配实际的点号。 4. **分组与引用**:...

    清华大学精品Python学习PPT课件-第5章 Python正则表达式.pptx

    【字符串与正则表达式】 在Python编程中,字符串是数据类型之一,广泛应用于文本处理。第五章“字符串与正则表达式”深入探讨了这一关键主题,旨在帮助初学者和有经验的开发者更好地理解和使用字符串及正则表达式。...

    常用正则表达式.doc

    ### 正则表达式知识点详解 #### 匹配中文字符的正则表达式:[\u4e00-\u9fa5] 此正则表达式用于匹配任何中文字符。Unicode编码范围`\u4e00`到`\u9fa5`涵盖了简体中文和繁体中文的所有常用字符。在实际应用中,例如...

    shell正则表达式.zip

    在IT领域,尤其是在Linux系统管理和自动化脚本编写中,Shell正则表达式(Regular Expression,简称regex)扮演着至关重要的角色。它是一种模式匹配工具,能够有效地搜索、查找、替换和解析文本。在这个名为"shell...

    Linux正则表达式.pdf

    Linux正则表达式.pdf 本文档主要介绍了 Linux 系统中的正则表达式的概念、历史、定义和应用。正则表达式是一种字符串匹配模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个...

    正则表达式.pdf

    、{、}、[、]、\、^、$等特殊字符,这些字符在正则表达式中具有特殊的含义。 3. 字符类:包括[abc]、[a-zA-Z]、[0-9]等,用于匹配特定的字符集。 4. 限定符:包括*、+、?、{n}、{n,}、{n,m}等,用于指定模式的重复...

    正则表达式.doc

    正则表达式是一种强大的文本处理工具,用于在字符串中匹配、查找、替换符合特定模式的文本。它通过一套特殊的语法,允许程序员或开发者定义复杂的文本匹配规则。在本教程中,我们将逐步介绍正则表达式的基本概念和...

    python之常用正则表达式.pdf

    文档的部分内容介绍了Python中常用的正则表达式符号及其含义,并通过示例展示了它们的实际应用。 ##### 常用符号及其含义 - **`.`**:匹配任意字符,除了换行符`\n`。 - **`\|`**:逻辑或,表示匹配多个选项之一。 ...

Global site tag (gtag.js) - Google Analytics