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

Jon*_*Jon 2 java regex

我试图从以下字符串中提取信息:

//YES: We got a match.
Run Code Online (Sandbox Code Playgroud)

我想提取定义两个组的信息

  • 介于//和之间的一切:
  • 其余的都在后面 :

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

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
Run Code Online (Sandbox Code Playgroud)

我也尝试过命名组:

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

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

Ian*_*rts 5

你必须调用其中find()matches()matcher以使其运行在匹配过程,然后才能提取组.该

example.matches(COMMENT_PATTERN);
Run Code Online (Sandbox Code Playgroud)

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

Pattern.compile(COMMENT_PATTERN).matcher(example).matches()
Run Code Online (Sandbox Code Playgroud)