JDK1.4里面的Matcher类有一个group(),group(int)等方法,虽然看了API,可还是不太清楚group的概念,有谁用过没有,能不能简单的给各例子,说明一下问题?

解决方案 »

  1.   

    返回在以前匹配操作期间由给定组捕获的输入子序列。 
    对于匹配器 m、输入序列 s 和组索引 g,表达式 m.group(g) 和 s.substring(m.start(g), m.end(g)) 是等效的。 捕获组是从 1 开始从左到右的索引。组零表示整个模式,因此表达式 m.group(0) 等效于 m.group()。 如果该匹配成功了,但指定组未能匹配输入序列的任何部分,则返回 null。注意,某些组(例如,(a*))匹配空字符串。当这些的组成功匹配输入中的空字符串时,此方法将返回空字符串
      

  2.   

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

  3.   

    import java.util.regex.*;
    class test2{
    public static void main(String[] args){
    Pattern p = Pattern.compile("(\\d)([A-C])");
     Matcher m = p.matcher("0A");
    m.matches();
    System.out.println(m.group(0));//注意,group(0)总是返回整个匹配字串
    System.out.println(m.group(1));
     System.out.println(m.group(2));
    }
    }
      

  4.   

    匹配结果除了整个结果可以得到外,表达式中的括号内的表达式,匹配到的结果也可以单独被得到。比如 "language=(\w+)" 在匹配 "<script language=javascript>" 时,除了得到匹配结果为 "language=javascript" 外,通过 group(1) 可以得到 "javascript"。更多详细的说明,欢迎参考正则表达式入门文档:(推荐)
    http://www.regexlab.com/zh/regref.htm测试工具:(推荐)
    http://www.regexlab.com/zh/workshop.asp?pat=language%3D%28%5Cw%2B%29&txt=%3Cscript%20language%3Djavascript%3E
      

  5.   

    这个例子如何:是这样的:
    bangdan.jsp?type=1
    bangdan.jsp?type=2
    bangdan.jsp?type=3
    bangdan.jsp?type=11
    等等替换成
    bangdan_1.html
    bangdan_2.html
    bangdan_3.html
    bangdan_11.html代码:String str="bangdan.jsp?type=1bangdan.jsp?type=2bangdan.jsp?type=3bangdan.jsp?type=11";
    System.out.println("之前:"+str);
    java.util.regex.Matcher m=java.util.regex.Pattern.compile("\\.jsp\\?type=([\\d]+)").matcher(str);
    StringBuffer sb=new StringBuffer();
    int index=0;
    while(m.find())
    {
    sb.append(str.substring(index,m.start(1))+ m.group(1)+".html");
    index=m.end(1);
    }
    str=sb.toString().replaceAll("\\.jsp\\?type=","_");
    System.out.println("之后:"+str);