在Sun的API中对在对 “最大匹配Greedy”“最小匹配Reluctant”“完全匹配Possessive”的描述,不能让我明白他们有什么区别,现在将我对这三种匹配模式的理解写出来,供大家参考。
1、Greediness(贪心)匹配:
X?、X*、X+、X{n,}都是最大匹配。例如你要用“<.+>”去匹配“a<tr>aava </tr>abb”,也许你所期待的结果是想匹配“<tr>”,但是实际结果却会匹配到“<tr>aava </tr>”。这是为什么呢?下面我们跟踪下最大匹配的匹配过程。
①“<”匹配字符串的“<”。②“.+”匹配字符串的“tr>aava </tr>ab”,在进行最大匹配时,它把两个“>”都匹配了,它匹配了所有字符,直到文本的最后字符“b” ③这时,发现不能成功匹配“>”,开始按原路回退,用“a”与“>”匹配,直到“ab”前面的“>”匹配成功。
2、Reluctant(Laziness)最小匹配
X?、X*、X+、X{n,}都是最大匹配。好,加个?就成了Laziness匹配。例如X??、X*?、X+?、X{n,}?都是最小匹配,其实X{n,m}?和X{n }?有些多余。
最小匹配意味者,.+? 匹配一个字符后,马上试一试>的匹配可能,失败了,则.+? 再匹配一个字符,再马上试一试>的匹配可能。JDK文档中Greedy 和 Reluctant,它是以eat一口来隐喻的,所以翻译成贪吃和(勉强的)厌食最贴切了。不过我喜欢最大匹配、最小匹配的说法。
3、Possessive完全匹配
与最大匹配不同,还有一种匹配形式:X?+、X*+、X++、X{n,}+等,成为完全匹配。它和最大匹配一样,一直匹配所有的字符,直到文本的最后,但它不由原路返回。也就是说,一口匹配,搞不定就算了,到也干脆,偶喜欢。
Use a possessive quantifier for situations where you want to seize all of something without ever backing off; it will outperform the equivalent greedy quantifier in cases where the match is not immediately found.
分享到:
相关推荐
Java正则表达式验证函数是Java编程中用于检查字符串是否符合特定模式的一种工具。在Java中,正则表达式(Regular Expression)是一种强大的文本处理工具,可以用来匹配、查找、替换等多种操作。这个函数的目的是简化...
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于模式匹配的概念,能够高效地进行文本搜索、替换和解析。在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心...
Java正则表达式验证固定电话号码符合性 Java正则表达式验证固定电话号码符合性是验证固定电话号码是否合法的重要步骤。通过使用Java正则表达式,可以实现固定电话号码的验证,确保输入的电话号码符合标准格式。本文...
java使用正则表达式进行校验验证,主要使用了Pattern和Matcher类,直接main方法运行就可以,亲测有效
本文将详细介绍如何使用Java正则表达式提取字符串中的特定字符。 首先,了解什么是正则表达式是非常有必要的。正则表达式(Regular Expression)是一种特殊字符序列,用于匹配一组字符串。在Java中,通过java.util....
Java正则表达式提取双引号中间的部分方法 Java正则表达式是Java语言中的一种模式匹配技术,用于字符串的搜索、验证和提取。今天,我们将分享Java正则表达式提取双引号中间的部分方法,这种方法可以应用于各种字符串...
在Java编程中,正则表达式是处理文本模式匹配的强大工具,尤其在处理网页内容时,如提取网址和链接文字。这个示例展示了如何使用Java的正则表达式来匹配网页中的所有网址和链接文字。下面将详细讲解相关知识点。 1....
### Java 正则表达式详解 #### 一、正则表达式基本概念 正则表达式(Regular Expression),简称regex或regexp,是一种用于处理文本的强大工具。它通过一系列的符号和字母来描述一种抽象的“搜索模式”,可以方便...
本篇文章将详细介绍如何使用Java正则表达式来获取两个特定字符之间的字符串,并通过一个具体的实例进行演示。 首先,让我们理解正则表达式的概念。正则表达式(Regular Expression)是一种模式,用于匹配字符串的...
以下将详细介绍如何使用Java正则表达式来实现这一功能。 首先,我们来看提供的代码片段: ```java public static String getHost(String url) { if(url==null||url.trim().equals("")) { return ""; } String ...