Pattern p = Pattern.compile("\\(([\\d])+-([\\d])+\\)");
Matcher matcher = p.matcher(“http://www.ebookee.net/tech-page(1-1581).html”);
while (matcher.find()) {
System.out.println(matcher.group());
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
}(1-1581)
1
1
group(2) 怎么不是1581

解决方案 »

  1.   

    觉得你对group和捕获组理解的不对吧。组和捕获 
    捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组: 1     ((A)(B(C))) 
    2     \A 
    3     (B(C)) 
    4     (C) 组零始终代表整个表达式。 之所以这样命名捕获组是因为在匹配中,保存了与这些组匹配的输入序列的每个子序列。捕获的子序列稍后可以通过 Back 引用在表达式中使用,也可以在匹配操作完成后从匹配器获取。 与组关联的捕获输入始终是与组最近匹配的子序列。如果由于量化的缘故再次计算了组,则在第二次计算失败时将保留其以前捕获的值(如果有的话)例如,将字符串 "aba" 与表达式 (a(b)?)+ 相匹配,会将第二组设置为 "b"。在每个匹配的开头,所有捕获的输入都会被丢弃。 以 (?) 开头的组是纯的非捕获 组,它不捕获文本,也不针对组合计进行计数。 
    不太懂正则表达式,让高手看看吧。
      

  2.   

    "\\(([\\d])+-([\\d])+\\)"分组错了,加号放在括号内应该
    "\\(([\\d])+-([\\d]+)\\)"