2010-03-10 59 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是一个非常好的地方先看看。