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

关于 Java正则表达式中的Possessive数量修饰词的理解

    博客分类:
  • Java
阅读更多

正则表达式对于数量限定符如 ?, + , *, {n, m} 的匹配默认是贪婪模式,比如:

a.*b   匹配 acbab 的结果是 acbab 而不是acb

正则表达式支持懒惰模式,也就是在数量限定符后加一个数量修饰词(quantifier),用问号表示, 比如:

a.*?b 匹配 acbab 的结果是 acb 而不是acbab

 

而Java语言在正则表达式中支持一种Possessive 数量修饰词 ,用加号表示。其字面意思是像贪婪模式一样匹配,但不回溯。这到底是什么意思呢?其实这和匹配算法相关,比如:

在贪婪模式下,正则表达式 a.*b 在匹配 acbac时,在匹配成功第一个字符a后,匹配算法会继续往后读取字符a之后的字符来匹配.* , 这时贪婪模式就起作用了,a后面的cbac都能匹配.*,但当匹配算法继续往后读取字符时,发现已经没有字符可读了,无法匹配正则表达式中的b了,于是就回溯一个字符,看c是否能匹配b,不能,继续回溯,直到回溯到b时,才匹配到了acb。 而a.*+b在匹配时是不会回溯的,也就是说当贪婪地读到最后一个字符时发现无有字符与b匹配了,就认为匹配失败了。

 

再举几个例子

(ab)*+a 匹配 ababacd 时 可以匹配到 ababa , 因为两个ab之后没有ab了,无法贪婪

a?+a 匹配aaaaa 时会匹配到 aa ,但 a++a和a{0, 10}+a却会匹配失败

0
0
分享到:
评论

相关推荐

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

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

    java正则表达式.pdf

    ### Java正则表达式详解 ...通过本文的介绍,读者应该能够更好地理解Java中的正则表达式及其基本用法。掌握这些基础知识后,你可以进一步探索更高级的功能和应用场景,以提高开发效率和代码质量。

    JAVA正则表达式速查表

    本文旨在详细介绍JAVA中的正则表达式用法及其各种语法元素,帮助开发者更好地理解和使用这些规则。 #### 二、基本概念与符号 1. **字符**: - `c`:表示字符`c`本身。 - `\unnnn`, `\xnn`, `\0n`, `\0nn`, `\0...

    正则表达式的构造摘要

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

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

    在Java中,可以利用正则表达式来解决这一问题,正则表达式是一种强大的文本处理工具,能够进行复杂的模式匹配和文本替换。 首先,我们来了解正则表达式中的贪婪模式(Greedy)、非贪婪模式(Reluctant)和占有模式...

    Java 正则表达式匹配模式(贪婪型、勉强型、占有型)

    在Java中,正则表达式模式有三种基本类型:贪婪型、勉强型(也称为懒惰型)和占有型。理解这些模式对于编写精确的字符串匹配代码至关重要。 1. 贪婪型(Greediness) 贪婪型匹配是默认的正则表达式行为,它的目标是...

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

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

    正则表达式

    学习正则表达式时,建议参考JDK文档中的`java.util.regex.Pattern`类文档,这将帮助你更深入地理解和掌握正则表达式的构造方法和技术细节。此外,网络上还有许多教程和在线练习资源可以帮助你提升正则表达式的使用...

    Regular Expressions

    例如,如何在Java、JavaScript等语言中应用正则表达式,以及如何使用正则表达式进行特定类型的数据匹配,比如匹配浮点数、验证电子邮件地址、匹配有效日期等。另外,还包含了一些关于正则表达式性能的问题,比如正则...

    Java正则之贪婪匹配、惰性匹配

    支配量词(Possessive Quantifiers)在Java中表示为`*+`、`++`、`{n}+`、`{n,m}+`和`{n,}+`,它们的行为与贪婪量词类似,但是一旦找到匹配,就不会回溯。这意味着一旦支配量词匹配了某个字符串片段,即使后续的正则...

    英语中的限定词.docx

    在英语中,限定词是词汇的一个重要类别,它们在句子中用来限定或修饰名词,表达特定的意义。限定词包括多种类型,例如定冠词、不定冠词、零冠词、物主限定词、名词属格、指示限定词、关系限定词、疑问限定词和不定...

    前端开源库-typographic-apostrophes-for-possessive-plurals

    在前端开发中,良好的用户体验和视觉细节是提升网站质量的关键因素之一。"前端开源库-typographic-apostrophes-for-possessive-plurals"就是这样一个专门针对文本排版优化的工具,它专注于所有格复数形式的撇号处理...

    英语专业术语大全.doc

    11. **形容词**(adjective)和**副词**(adverb):形容词用来修饰名词,副词修饰动词、形容词或其他副词,描述程度、方式、时间、地点等。 12. **代词**(pronoun):代词用于替代名词,包括人称代词(personal ...

    中小学校教师资格考试常用英语语法专业术语英汉对照.doc

    34. **形容词 (Adjective)**: 修饰名词或代词,表示特征、状态或数量的词。 35. **名词 (Noun)**: 代表人、事物、地点、概念的词。 36. **专有名词 (Proper Noun)**: 特指特定的人、地方或事物,通常首字母大写。 ...

    英语语法大全英语语法大全

    副词是英语语法中用于修饰动词、形容词或其他副词的词语,如quickly、very、well等。副词可以分为方式副词(Manner Adverbs)、时间副词(Time Adverbs)、地点副词(Place Adverbs)等几类。 八、冠词(Articles)...

Global site tag (gtag.js) - Google Analytics