正则表达式 非贪婪匹配

来自姬鸿昌的知识库
跳到导航 跳到搜索

https://www.bilibili.com/video/BV1Eq4y1E79W/?p=15

正则表达式默认是“贪心的”,但灵活运用 ?,可以进行“非贪心”搜索:


?

当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。

“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索得到的是尽可能长的字符串。

例如,在字符串“oooo”中 "o+?"只匹配单个 "o",而 "o+"匹配所有“o”。




示例:在"oooo"中匹配"o+?"

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegExp08 {

    public static void main(String[] args) {

        String content = "oooo";

        String regStr = "o+?";

        Pattern pattern = Pattern.compile(regStr);

        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {

            System.out.println("找到:" + matcher.group(0));

        }

    }

}
找到:o
找到:o
找到:o
找到:o

思考:等价于匹配"o"吧


示例:在"oooo"中匹配"o+"

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegExp08 {

    public static void main(String[] args) {

        String content = "oooo";

        String regStr = "o+";

        Pattern pattern = Pattern.compile(regStr);

        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {

            System.out.println("找到:" + matcher.group(0));

        }

    }

}
找到:oooo



示例:在"hello111111 ok"中匹配"\\d+"

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegExp08 {

    public static void main(String[] args) {

        String content = "hello111111 ok";

        String regStr = "\\d+";

        Pattern pattern = Pattern.compile(regStr);

        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {

            System.out.println("找到:" + matcher.group(0));

        }

    }

}
找到:111111