我正在尝试从以下字符串中提取信息:
//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
为什么我的模式无法提取指定的组?
答案 0 :(得分:5)
您必须在find()
上调用matches()
或matcher
才能使其运行匹配过程,然后才能提取组。在
example.matches(COMMENT_PATTERN);
创建自己的内部匹配器,调用matches()
然后丢弃匹配器 - 它相当于
Pattern.compile(COMMENT_PATTERN).matcher(example).matches()