2010-03-10 88 views
2
System.out.println(matcher.group(1)); 
System.out.println(matcher.group()); 

我想知道上面兩個代碼有什麼區別。我得到不同的輸出。有人可以詳細說明這一點嗎?以下兩者有什麼區別?

感謝

+0

對於簡單的示例,我得到了group()和group(1)完全相同的值:您能提供一個特定的表達式和輸入字符串嗎? – 2010-03-10 21:29:26

回答

8

group()調用給你匹配整個字符串,而group(1)給你第一個括號中的「捕捉」組(或者更一般地,group(n)會給你第n個捕獲組,計數左/左括號,從1開始)。

因此,舉例來說,如果你有一個輸入字符串是這樣的:

The quick brown fox 

你對下面的正則表達式(不帶引號)匹配:

"The (\\w+)" 

然後group()會給你「快速」和group(1)會給你「快速」。

有關Java中所有這些正則表達式工作原理的更多詳細信息,請參閱Java教程java.util.regex.Matcher

+0

這個正則表達式缺少一些東西,你是不是指「(\\ w +)'」? (從技術上說,它不會匹配 - 'matches()',它會被發現 - 'find()') – 2010-03-11 10:14:43

+0

已更新以添加反斜槓,並且您正確地說'matches()'與'find()' 。 – 2010-03-11 17:19:53

2

我點你的JavaDoc中Matcher

組():

返回由以前匹配

組(INT)所匹配的輸入序列:

返回上一次匹配操作期間給定組捕獲的輸入子序列。

+0

請使用'> ...'來引用。 – kennytm 2010-03-11 17:32:29

+0

@KennyTM完成:-) – karlgrz 2010-03-11 18:58:47

1

API doc是一個非常好的地方先看看。