首页 > 解决方案 > Java Regex Group By 不能按预期的数字工作

问题描述

我遇到了 Java Matchers 的问题。我可能在这里忽略了一些非常小的东西,但是下面的匹配器没有给出预期的结果

    private static final Pattern STANDARD_NAME_PATTERN = Pattern.compile("MySampleString.*?/(?<PatternOne>.+?)/(?<PatternTwo>\\w+?)/PatternThree(?<PatternThree>\\d+?).*");

    public static void main(String[] args) {
        String key = "PatternThree";
        String value = "EMPTY";
        String name = "MySampleString/IRRELEVANT/IRRELEVANT/PatternThree15";
        Matcher matcher = STANDARD_NAME_PATTERN.matcher(name);
        if (matcher.matches()) {
            value = matcher.group(key);
        }
        System.out.println(value);
    }

以下输出是

1

但是,我希望它在这里是 15,因为我们将数字与 \d+ 匹配其他两个模式与单词匹配......如果有人可以提供见解,不确定这里的问题是什么。

我可以使用的黑客之一是

Pattern.compile("MySampleString.*?/(?<PatternOne>.+?)/(?<PatternTwo>\\w+?)/PatternThree(?<PatternThree>\\d\\d\\d?).*");

但理想情况下不想这样做,因为它不能扩展

标签: javaregex

解决方案


试试这个(删除最后一个问号):

MySampleString.*?/(?<PatternOne>.+?)/(?<PatternTwo>\w+?)/PatternThree(?<PatternThree>\d+).*

见正则表达式演示


推荐阅读