不情愿的量词表现得贪婪



我有这个代码:

String result = text;
    String regex = "((\(|\[)(.+)(\)|\])){1}?";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(result);
    System.out.println("start");
    System.out.println(result);
    while (matcher.find()) {
        System.out.print("Start index: " + matcher.start());
        System.out.print(" End index: " + matcher.end() + " ");
        System.out.println(matcher.group());
    }
    System.out.println("finish");

我有一个想要匹配的字符串:

Some text sentence or sentences [something 234] (some things)

以及我在执行时得到的输出:

start
some text sentence or sentences [something 234] (some things)
Start index: 32 End index: 61 [something 234] (some things)
finish

现在我实际上希望它分别在括号中找到找到的案例,以便找到:[某物234]在一场比赛中(有些东西)作为第二场比赛

任何人都可以帮助我相应地构建正则表达式吗?我不确定如何为整个正则表达式放置不情愿的量词,所以我将整个括号中的元素括在另一个括号中。但我不明白为什么这个不情愿的量词在这里表现得很贪婪,我需要做些什么来改变它?

则表达式中的{1}是多余的,因为任何没有指定量词的元素都需要找到一次。让它不情愿也是没有意义的,因为它没有描述可能的重复范围(比如{min,max}添加?会告诉正则表达式引擎使该范围内的重复次数尽可能接近min)。这里{n}描述了精确的重复次数,因此min = max = n

现在,您应该能够通过使.+(括号内的内容)不情愿来解决您的问题。为此,请使用 .+? .

所以试试:

String regex = "((\(|\[)(.+?)(\)|\]))";

最新更新