使用模式匹配器的 Java 正则表达式未正确返回?

标签 java regex regex-group

我必须从以下字符串中获取索引值:

Home.number[12].parent. 

我想取回值 12。

这是我尝试过的:

//escape . / [ ]
 private static final String pattern = "Home\\.number\\[([0-9]*)\\]*";
 private static final Pattern addressPattern = Pattern.compile(pattern);

   private static int getIndex(String input, Pattern pattern){

        Matcher m = pattern.matcher(input);
        if (m.matches()){
        return Integer.valueOf(m.group(2));
        }
        return -1;
    }

    public static void main(String[] args){

    System.out.println(getIndex("Home.number[123].parent", addressPattern);
    System.out.println(getIndex("Home.number[456].child", addressPattern);   
}

两者都返回 -1,表示未找到匹配项。

使用调试器,我发现 m.matches() 返回 false。 我无法弄清楚为什么。

P.S: 我也试过使用 Pattern.quote("Home.number[([0-9]*])*")StringUtils.EscapeJava("Home.number[ ([0-9]*)]*")。两者均未返回任何匹配结果。

最佳答案

你的 Pattern 应该是这样的

private static final String pattern = "Home\\.number\\[(\\d+)\\]\\..*";
private static final Pattern addressPattern = Pattern.compile(pattern);

而你的匹配器只有 1 组。

private static int getIndex(String input, Pattern pattern) {
    Matcher m = pattern.matcher(input);
    if (m.matches()) {
        return Integer.parseInt(m.group(1));
    }
    return -1;
}

并且您需要关闭 main 调用中的第二个括号。有点像

public static void main(String[] args) {
    System.out.println(getIndex("Home.number[123].parent", addressPattern));
    System.out.println(getIndex("Home.number[456].child", addressPattern));
}

当我进行这些更改时,我得到了预期的结果

123
456

关于使用模式匹配器的 Java 正则表达式未正确返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31305698/

相关文章:

java - 从 xml 文件解析/读取 öäü

ios - NSPredicate 检查字符串长度

C# 正则表达式 : Remove leading and trailing double quotes (")

javascript - 文本区域中空格后@的正则表达式

html - 用于匹配所有 <img> 标记并提取 "src"属性的正则表达式

java - 如何向 jMusic 添加 "Arabian"或 "Microtone"或 "Quarter-tone"支持?

java - 数组与变量方法调用相比

java - 检查 firebase child 是否具有特定值

javascript - 用于匹配 N 位数字加连续数字的正则表达式

regex - golang 如何用正则表达式组替换字符串?