`

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

 
阅读更多

+贪婪匹配与非贪婪匹配

贪婪匹配
 默认情况下,正则表达式使用最长匹配原则(也叫贪婪匹配原则)。
 例如:要将"zoom"中匹配"zo?"的部 分替换成"r",替换的的结果是"rom"。如果要将"zoom"中匹配"zo*"   的部分替换成"r",替换后的结果是"rm"。

非贪婪匹配
 当字符?紧随其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式变成了最短匹配原则(也 叫非贪婪匹配原则)。
 例如:在字符串"fooood"中,"fo+?"只匹配"fo"部分,而"fo+"匹配"foooo部分。

 

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

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

a.*?b 匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab和ab。

分享到:
评论

相关推荐

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

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

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

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

    正则表达式---Python程序设计1

    正则表达式还支持两种匹配模式:贪婪匹配和懒惰(非贪婪)匹配。默认情况下,正则表达式采用贪婪模式,即尽可能多地匹配文本。例如,若要匹配 `<a>` 和 `<b>` 之间的所有文本,可以使用以下正则表达式: ```python ...

    第4章 数据处理-php正则表达式-郑阿奇(续)

    正则表达式是一种文本处理的重要工具,它允许用户通过定义一套规则来搜索或匹配特定的字符串模式。PHP作为一门广泛使用的脚本语言,内置了强大的正则表达式功能,能够帮助开发者更有效地处理数据和执行文本操作。 ...

    正则表达式-大部分示例

    - **非贪婪匹配**:默认情况下,正则表达式中的量词是贪婪的,即尽可能多地匹配。使用`?`可以使量词变为非贪婪的,即尽可能少地匹配。 - **条件匹配**:可以使用正向先行断言和负向先行断言等高级功能来实现更加复杂...

    java正则表达式.zip

    - 贪婪与非贪婪匹配:默认情况下,`*`, `+`, `?`是贪婪的,会尽可能多地匹配。如果在后面加上`?`,如`.*?`,则变为非贪婪,尽可能少地匹配。 **7. 性能考虑** 虽然正则表达式功能强大,但过度使用或者设计复杂的...

    C语言正则表达式库

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

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

    在编程领域,正则表达式(Regular Expression)是一种强大的文本处理工具,用于匹配、查找、替换、分割等操作。在本教程中,我们将深入探讨如何使用正则表达式来拆分字符串,这对于数据处理和文本分析尤其有用。下面...

    python正则表达式_深入浅出

    - **非贪婪匹配**:添加`?`后缀到量词上,如`.*?`,使得匹配尽可能少的字符。 2. Python中的正则表达式模块: - **`re`模块**:Python内置的正则表达式模块,提供了一系列函数如`match()`、`search()`、`findall...

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

    在这其中,正则表达式的贪婪模式与非贪婪模式是两个关键的概念,它们决定了正则表达式如何处理连续重复的字符或字符集。深入理解这两种模式的差异,对于编写高效且准确的正则表达式至关重要。 首先,让我们探讨贪婪...

    正则表达式大全.docx

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

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

    正则表达式是一种强大的文本处理工具,用于在字符串中匹配、查找、替换符合特定模式的文本。通过30分钟的入门教程,你可以快速理解其基本概念和常用语法,从而在编程或网页开发中灵活运用。 首先,让我们了解什么是...

    JavaScript正则表达式匹配 div style标签

    当与`<div>`或`<style>`标签的开始和结束相对应时,这些正则表达式将匹配整个标签及其内部内容。 需要注意的是,这种方法是不完美的,特别是当标签内含有其他标签时,容易出现匹配错误。比如,如果`<div>`标签中...

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

    - **正则表达式性能优化**:避免过度复杂的正则表达式,合理使用非贪婪匹配,减少回溯。 - **正则表达式调试**:使用`re.DEBUG`标志编译正则表达式,查看其内部结构。 - **正则表达式在其他语言中的差异**:虽然...

    正则表达式调试工具

    - **非贪婪匹配**:默认情况下,量词是贪婪的,尽可能多的匹配字符;加上`?`后变为非贪婪,尽可能少的匹配字符。 通过正则表达式调试工具,开发者可以有效地调试和优化正则表达式,避免潜在的性能问题和错误匹配。...

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

    Java正则表达式是Java语言中用于处理字符串的强大工具,它允许程序员进行复杂的字符串匹配、查找和替换操作。正则表达式(Regular Expression)是一种模式匹配语言,通过特定的语法来描述字符串的模式,用于在文本中...

    正则表达式匹配调试工具

    - **非贪婪匹配**:在量词后加上`?`,如`.*?`,使得匹配尽可能少的字符。 掌握正则表达式不仅可以提高文本处理的效率,还可以让你在解决各种文本相关问题时游刃有余。通过使用正则表达式匹配调试工具,我们可以更好...

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

    "(懒惰匹配)和"{n,m}+"(贪婪匹配)控制量词的匹配行为,前者尽可能少匹配,后者尽可能多匹配。 三、正则表达式在编程语言中的应用 1. Python:Python的`re`模块提供了正则表达式支持,包括`match()`、`search()`、`...

Global site tag (gtag.js) - Google Analytics