贪恋匹配
对应的是懒惰匹配
。
贪恋匹配
指的是在满足正则表达式
的规则的前提下,尽可能的匹配尽可能多的字符,并且只匹配一次。
懒惰匹配
则和贪婪匹配
相反。它会尽可能少的匹配字符。可能会匹配到多个。
例如我们想要匹配这个规则:a.*b
, 匹配的字符串为aababa
。
贪恋匹配会匹配到:aabaab
,匹配到的最长的字符串。
懒惰匹配则会匹配到:aab
、ab
,尽可能的匹配了最短的字符,切匹配到了多个。
贪婪匹配和懒惰匹配影响的是正则表达式限定符
的匹配结果。
在限定符后面加?
,则为懒惰匹配,否则为贪婪匹配。
懒惰限定符
代码/语法 | 说明 |
---|---|
*? | 重复任意次 |
+? | 重复1次或更多 |
?? | 重复0次或1次 |
{m, n}? | 重复n到m次 |
{m,}? | 重复m次以上 |
public static void match(String regex, String input) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
String m = matcher.group();
System.out.println(m);
}
}
public static void main(String[] args) {
String desc = "{}this is a test{}";
System.out.println("贪婪匹配:");
String greedy = "\\{.*}";
match(greedy, desc);
// 分割线
System.out.println("================分割线=================");
System.out.println("懒惰匹配:");
String lazy = "\\{.*?}";
match(lazy, desc);
}
以上代码执行结果:
贪婪匹配:
{}this is a test{}
================分割线=================
懒惰匹配:
{}
{}