2013-11-03 60 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() 
相關問題