`
magicalboy
  • 浏览: 12794 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

正则表达式之贪婪模式

阅读更多
象 * 这样地重复是“贪婪的”;当重复一个 RE 时,匹配引擎会试着重复尽可能多的次数。如果模式的后面部分没有被匹配,匹配引擎将退回并再次尝试更小的重复。


一步步的示例可以使它更加清晰。让我们考虑表达式 a[bcd]*b。它匹配字母 "a",零个或更多个来自类 [bcd]中的字母,最后以 "b" 结尾。现在想一想该 RE 对字符串 "abcbd" 的匹配。
Step Matched Explanation
1 a a 匹配模式
2 abcbd 引擎匹配 [bcd]*,并尽其所能匹配到字符串的结尾
3 Failure 引擎尝试匹配 b,但当前位置已经是字符的最后了,所以失败
4 abcb 退回,[bcd]*尝试少匹配一个字符。
5 Failure 再次尝次b,但在当前最后一位字符是"d"。
6 abc 再次退回,[bcd]*只匹配 "bc"。
7 abcb 再次尝试 b ,这次当前位上的字符正好是 "b"

RE 的结尾部分现在可以到达了,它匹配 "abcb"。这证明了匹配引擎一开始会尽其所能进行匹配,如果没有匹配然后就逐步退回并反复尝试 RE 剩下来的部分。直到它退回尝试匹配 [bcd] 到零次为止,如果随后还是失败,那么引擎就会认为该字符串根本无法匹配 RE 。
分享到:
评论

相关推荐

    C语言正则表达式库

    1. **语法兼容性**:如描述所述,PCRE库的正则表达式语法与Perl语言高度兼容,这意味着开发者可以利用Perl中广泛使用的正则表达式语法,如贪婪和非贪婪量词、分支选择、反向引用等。 2. **Unicode支持**:PCRE库...

    正则表达式大全.docx

    以上给出的正则表达式仅覆盖了一些基础用例,实际的正则表达式可以变得极其复杂,涉及更多的元字符和修饰符,如贪婪与非贪婪匹配、分组、零宽断言等。正则表达式的学习和掌握需要时间和实践,但一旦熟悉,它们将成为...

    java正则表达式.zip

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于模式匹配的概念,能够高效地进行文本搜索、替换和解析。在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心...

    正则表达式——贪婪非贪婪模式.rar

    在"正则表达式——贪婪非贪婪模式.pdf"这个文档中,你可能会深入学习到如何在各种情况中使用贪婪和非贪婪模式,包括在实际编程中的实例分析,以及如何结合其他正则表达式元字符和操作符来实现更复杂的匹配需求。...

    正则表达式调试工具

    正则表达式(Regular Expression,简称regex)是用于在文本中匹配特定模式的强大工具,广泛应用于数据验证、搜索替换和文本处理等领域。正则表达式调试工具是开发人员用来测试和优化这些模式的重要辅助工具。本文将...

    正则表达式--递归匹配与非贪婪匹配

    ### 正则表达式——递归匹配与非贪婪匹配 #### 一、递归匹配 在正则表达式中,递归匹配是一个重要的概念,它主要用于处理那些具有嵌套结构的数据,例如数学公式中的括号匹配或HTML标签的匹配。 ##### 1.1 嵌套...

    正则表达式学习资料以及练习项目代码很多

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。在Python编程语言中,正则表达式提供了强大的文本处理能力,使得开发者能够高效地处理...

    详解正则表达式的贪婪模式与非贪婪模式

    正则表达式的贪婪模式与非贪婪模式是正则表达式中的两个重要概念,它们决定了正则表达式在进行匹配操作时的行为模式。理解这两种模式对于正确使用正则表达式进行文本处理非常重要。 首先,我们来解释一下什么是正则...

    易语言正则表达式匹配中文

    同时,确保在编写正则表达式时避免无限循环和贪婪匹配,以免导致程序卡死。 综上所述,易语言正则表达式匹配中文涉及了字符串处理、字符编码、正则表达式语法等多个方面。通过学习和掌握这些知识点,开发者可以有效...

    使用正则表达式拆分字符串

    - 当正则表达式中包含贪婪模式时,可能会导致意外的拆分结果。可以使用非贪婪量词`*?`, `+?`, `??`, `{m,n}?`来避免这个问题。 - 在某些情况下,正则表达式可能过于复杂,导致性能下降,应谨慎设计正则模式。 ...

    源码(精通正则表达式&实战正则表达式)

    在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,用于匹配、查找、替换或提取字符串中的特定模式。本资源“源码(精通正则表达式&实战正则表达式)”专注于JavaScript环境下的正则...

    Java正则表达式 Java 正则表达式

    正则表达式(Regular Expression)是一种模式匹配语言,通过特定的语法来描述字符串的模式,用于在文本中寻找符合该模式的字符串。 1. **基本概念与用途** - 正则表达式主要用途包括字符串匹配、查找和替换。 - ...

    C#字符串和正则表达式参考手册

    9. 复杂模式:正则表达式支持更复杂的模式,如贪婪与非贪婪量词`*?`、`+?`、`??`、`{n,}?`等,以及字符类、分组、后向引用等高级特性。 学习和熟练掌握C#中的字符串和正则表达式,能够极大地提升你在处理文本数据时...

    delphi xe 10 正则表达式

    在Delphi XE10中,正则表达式是一种强大的文本处理工具,它允许程序员通过模式匹配来查找、替换或提取字符串中的特定模式。本文将深入探讨Delphi XE10中的正则表达式功能,包括基本概念、语法、API接口以及实际应用...

    正则表达式综合练习

    11. **优化技巧**:正则表达式可能会带来性能问题,因此在编写复杂的模式时,应考虑使用非贪婪匹配(`*?`、`+?`、`??`),避免回溯,以及使用预编译模式提高效率。 12. **调试与测试**:使用在线工具(如Regex101、...

    grep、sed、awk、perl等对正则表达式的支持的差别

    4. **perl**:Perl是一种强大的脚本语言,正则表达式是其核心特性之一。Perl的正则表达式功能非常强大,支持大量的高级构造,如正向预查、反向预查、条件表达式等。Perl在处理文本时,不仅可以进行简单的查找替换,...

    javascript正则表达式迷你书 (1).pdf

    正则表达式中的字符匹配攻略是指使用特殊的字符或符号来匹配字符串中的特定模式。例如,`.`字符可以匹配任何单个字符,而`[abc]`字符组可以匹配任何一个在方括号中的字符。 横向模糊匹配 横向模糊匹配是指使用特殊...

    神奇的匹配 正则表达式求精之旅

    在“神奇的匹配 正则表达式求精之旅”中,我们将深入探讨这一技术的奥秘,揭示其在数据查找、提取、替换等方面的功能。 正则表达式的核心在于模式匹配,通过特定的字符组合来定义一个搜索模式。这些模式可以是简单...

Global site tag (gtag.js) - Google Analytics