2013-11-03 33 views
2

我试图从以下字符串中的信息:为什么我的正则表达式匹配但不捕获一个组?

//YES: We got a match. 

我想提取定义两组

信息
  • 一切//
  • 之间:所有后面:
  • 休息

该模式正确匹配,但我c注释提取组。

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 

为什么我的模式不能提取指定的群体?

+2

首先,你需要把'+'** **中的匹配组,否则你会得到在组1中匹配的最后一个字符'(\\ w +)'。 – HamZa

+2

注意修复第3行中的语法错误?这是简短的,由其他人编辑;) –

+1

什么@HamZa的意思是删除组后,并把它放在里面。我修好了它。 –

回答

5

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

example.matches(COMMENT_PATTERN); 

创建自己的内部匹配器,来电matches(),然后丢弃匹配器 - 这相当于

Pattern.compile(COMMENT_PATTERN).matcher(example).matches() 
相关问题