Skip to content

Latest commit

 

History

History
70 lines (49 loc) · 1.94 KB

正则表达式贪婪和懒惰匹配.md

File metadata and controls

70 lines (49 loc) · 1.94 KB

贪婪匹配、懒惰匹配

贪恋匹配对应的是懒惰匹配

贪恋匹配指的是在满足正则表达式的规则的前提下,尽可能的匹配尽可能多的字符,并且只匹配一次。

懒惰匹配则和贪婪匹配相反。它会尽可能少的匹配字符。可能会匹配到多个。

例如我们想要匹配这个规则:a.*b, 匹配的字符串为aababa

贪恋匹配会匹配到:aabaab,匹配到的最长的字符串。

懒惰匹配则会匹配到:aabab,尽可能的匹配了最短的字符,切匹配到了多个。

贪婪和懒惰匹配转换

贪婪匹配和懒惰匹配影响的是正则表达式限定符的匹配结果。

在限定符后面加?,则为懒惰匹配,否则为贪婪匹配。

懒惰限定符

代码/语法 说明
*? 重复任意次
+? 重复1次或更多
?? 重复0次或1次
{m, n}? 重复n到m次
{m,}? 重复m次以上

JAVA 实现

    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{}
================分割线=================
懒惰匹配:
{}
{}