3

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

//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

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

4

1 回答 1

6

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

example.matches(COMMENT_PATTERN);

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

Pattern.compile(COMMENT_PATTERN).matcher(example).matches()
于 2013-11-03T20:15:00.563 回答