为什么我的正则表达式匹配但不捕获组?

时间:2013-11-03 20:12:20

标签: java regex

我正在尝试从以下字符串中提取信息:

//YES: We got a match.

我想提取定义两组的信息

  • //:
  • 之间的所有内容
  • :
  • 背后的所有其余部分

模式匹配正确,但我无法提取组。

String example = "//YES: We got a match.";
String COMMENT_PATTERN = "//(\\w+):(.*)";
Pattern pattern = Pattern.compile(COMMENT_PATTERN);

example.matches(COMMENT_PATTERN);            // true
Matcher matcher = pattern.matcher(example);
matcher.group(1);                             // raises an exception

我也尝试过命名组:

String COMMENT_PATTERN = "//(?<init>\\w+):(?<rest>.*)";
...
matcher.group("init");                        // raises an exception

为什么我的模式无法提取指定的组?

1 个答案:

答案 0 :(得分:5)

您必须在find()上调用matches()matcher才能使其运行匹配过程,然后才能提取组。在

example.matches(COMMENT_PATTERN);

创建自己的内部匹配器,调用matches()然后丢弃匹配器 - 它相当于

Pattern.compile(COMMENT_PATTERN).matcher(example).matches()