`
qq4628241
  • 浏览: 62946 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java正则表达式 贪婪 勉强 匹配说明 greedy vs ( lazy | reluctant )

阅读更多
问题描述:
String str = "aaa\"bbb\"ccc\"ddd\"eee";
str = str.replaceAll("\"(.*)\"", "@");
此时默认为贪婪匹配模式, 输出结果 str==> aaa@eee

String str = "aaa\"bbb\"ccc\"ddd\"eee";
str = str.replaceAll("\"(.*?)\"", "@");
此时为勉强匹配模式, 输出结果 str==> aaa@ccc@eee

总结:
相信大家已经发现了,java 正则表达式默认用的是greedy贪婪匹配模式既是这种类型
(.*)的最长匹配, 如果需要最短匹配则改为(.*?)既是勉强匹配模式

原理分析:


如果是贪婪匹配模式,正则表达式引擎会一直匹配到字符串最后,当匹配为false时,通过
回溯的方式,倒退找到倒数第一个匹配位置,返回匹配结果

如果是勉强匹配模式,正则表达式引擎会匹配到符合pattern的末尾位置那个字符,然后再往后走一步,发现匹配为false, 又回溯到找到回退的最近一个匹配为true的位置,返回结果

不是很好表达,大家意会下
分享到:
评论
1 楼 Taoo 2011-11-20  
谢啦,很好的表达。

相关推荐

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

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

    java正则表达式.pdf

    ### Java正则表达式详解 #### 一、引言 正则表达式是计算机科学中的一个强大工具,用于处理文本数据。随着Java的发展,自J2SE 1.4版本开始,Java正式引入了对正则表达式的支持,并提供了一系列功能强大的API。本文...

    正则表达式入门教程(pdf版

    随着学习的深入,会接触到更复杂的概念,如字符类(class)、分枝条件(branch)、分组(group)、后向引用(backreference)、零宽断言(lookaround)以及贪婪与懒惰匹配(greedy and lazy matching)等。...

    正则表达式检查小工具

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。在编程语言中,如Java,正则表达式是通过特定的API来使用的,例如Java的`java.util....

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

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

    python正则表达式的懒惰匹配和贪婪匹配说明

    Python中的正则表达式在处理字符串匹配时有两种主要模式:贪婪匹配和懒惰匹配,这两种模式在处理相同正则表达式时会有不同的行为,对于字符串的解析和提取有着显著的影响。 1. **贪婪匹配(Greedy Matching)** ...

    正则表达式的构造摘要

    正则表达式是一种强大的文本处理工具,用于模式匹配和搜索替换等操作,广泛应用于各种编程语言,如Java中。本文将深入解析正则表达式的构造摘要,帮助读者理解和掌握正则表达式的各种元素和语法。 ### 一、转义序列...

    通过Java正则表达式去掉SQL代码中回车换行和多余空格

    首先,我们来了解正则表达式中的贪婪模式(Greedy)、非贪婪模式(Reluctant)和占有模式(Possessive)。这三种模式主要通过在量词后添加不同的符号来区分,它们对正则表达式的匹配行为有着重要的影响: 1. 贪婪...

    JS正则表达式学习之贪婪和非贪婪模式实例总结

    相对地,非贪婪模式(Lazy or Non-greedy Mode)则是指在进行匹配时,正则表达式尽可能少地匹配字符。要实现非贪婪模式,需要在量词(如`+`、`*`、`?`、`{m,n}`)后面加上一个问号`?`。在上面的代码示例中,使用`[\W...

    正则表达式的学习源码

    例如,创建一个正则表达式,包含捕获组和非捕获组,使用贪婪或非贪婪匹配,以及应用或关系和零宽度断言进行文本匹配和提取。通过实例化`Pattern`对象,调用`matcher(String input)`方法,然后使用`matches()`, `find...

    正则表达式

    - **Greedy(贪婪的)**:默认情况下,数量表示符是贪婪的,即尽可能多地匹配字符。 - **Reluctant(勉强的)**:通过添加问号(?)来实现,表示尽可能少地匹配字符。 - **Possessive(占有的)**:目前仅Java...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    * Summary of regular-expression constructs 正则表达式结构简介: * Construct Matches * Characters 字符: * x The character x x 字符 x * \\ The ...

    cpp-python正则表达式引擎的一个轻量级分支

    标题中的“cpp-python正则表达式引擎的一个轻量级分支”指的是一个小型的、基于C++的正则表达式库,它旨在实现与Python正则表达式引擎相似的功能,但保持轻量化和低依赖性。这个库可能是从一个更大型的项目中分支...

    正则表达式(regex) 贪婪模式、懒惰模式使用方法

    贪婪模式(Greedy Mode)是正则表达式默认的匹配模式。当使用贪婪匹配时,正则表达式引擎尽可能多地匹配符合模式的字符。在贪婪模式下,正则表达式会匹配尽可能长的字符串。例如,如果模式是".*"(点号匹配任意字符...

    正则表达式学习与进步

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。它通过一种简洁而强大的语法来定义一系列字符或字符序列,可以用来检测一个字符串是否...

    python中如何使用正则表达式的非贪婪模式示例

    在正则表达式中,贪婪与非贪婪模式是两种不同的匹配策略,它们主要影响由量词(如*、+、?或{m,n})修饰的子表达式的匹配行为。 **贪婪模式**: 在默认情况下,正则表达式采用贪婪模式,它会尽可能多地匹配字符。...

Global site tag (gtag.js) - Google Analytics