正则表达式不捕获预期的组

时间:2016-11-05 05:02:26

标签: java regex

我认为小组[1]应该是" xyz"小组[2]应该是' ab'对于此输入字符串。

String p = "(.+)\\s(ab|cd|efg)";

Pattern pattern = Pattern.compile(p);

String str = "xyz ab";

Matcher m = pattern.matcher(str);

System.out.println(m.group(1));
System.out.println(m.group(2));

1 个答案:

答案 0 :(得分:1)

您必须致电m.find()

String p = "(.+)\\s(ab|cd|efg)";

    Pattern pattern = Pattern.compile(p,Pattern.DOTALL);

    String str = "xyz ab";

    Matcher m = pattern.matcher(str);

    if (m.find()) { 
        System.out.println(m.group(1));
        System.out.println(m.group(2));
    }

find()将尝试查找与模式匹配的输入序列的下一个子序列。

输出:

xyz
ab

您也可以在获取群组之前致电m.matches();,而不是if (m.find()),但将find()matches()if一起使用是一种很好的做法验证找到的匹配