能解析 但是只能解析出最后一个组 程序如下:st = "( 1,0 ) ( 2,3 ) [ ( 3,5 ) ( 4,5 ) ] ";
Pattern p = Pattern.compile("^(\\(\\s\\d+\\,\\d+\\s\\)+\\s)*(\\[\\s+(\\(\\s\\d+\\,\\d+\\s\\)+\\s)+\\]\\s)*$");
m = p.matcher(st);while(m.find()){
                System.out.println("m.group = " + m.groupCount());
                System.out.println("m.group(0) = " + m.group(0));
                System.out.println("m.group(1) = " + m.group(1));
                System.out.println("m.group(2) = " + m.group(2));输出是: 
m.group = 3
m.group(0) = ( 1,0 ) ( 2,3 ) [ ( 3,5 ) ( 4,5 ) ] 
m.group(1) = ( 2,3 ) 
m.group(2) = [ ( 3,5 ) ( 4,5 ) ] 问题: 为什么group(1)只输出(2,3)而没有(1,0)???

解决方案 »

  1.   

    System.out.println("m.group(3) = " + m.group(3));m.group(3) = ( 4,5 )
    关注!期待高手!
      

  2.   


    Pattern p = Pattern.compile("^((?:\\(\\s\\d+\\,\\d+\\s\\)\\s)*)((?:\\[\\s\\(\\s3\\,5\\s\\)\\s\\(\\s4\\,5\\s\\)\\s\\]\\s)*)$");
      

  3.   

    ("^(\\(\\s\\d+\\,\\d+\\s\\)+\\s)*?(\\[\\s+(\\(\\s\\d+\\,\\d+\\s\\)+\\s)+\\]\\s)*$"
    ("^(\\(\\s\\d+\\,\\d+\\s\\)+\\s)*+(\\[\\s+(\\(\\s\\d+\\,\\d+\\s\\)+\\s)+\\]\\s)*$"结果还是一样,没有任何区别。为什么??
      

  4.   

    错了错了Pattern p = Pattern.compile("^((?:\\(\\s\\d+\\,\\d+\\s\\)+\\s)*)((?:\\[\\s+(?:\\(\\s\\d+\\,\\d+\\s\\)\\s)+\\]\\s)*)$");
      

  5.   

    简单点的例子:String st = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; 
    Pattern p = Pattern.compile("^(A)*$"); // 括住了一个 A
    m = p.matcher(st); while(m.find()){ 
        System.out.println("m.group(1) = " + m.group(1)); // 你会看到只有一个 "A";
    }
    // (A)*  这里只括了一个A,  在重复匹配时,后面捕获了新的内容, 前面的已捕获的就丢失了// 而按你的意思, 应该这么写 "^(A*)$" 就是让括号把 * 号也括起来, 让多个 A 一起捕获到.
    另外,上面用到了 (?:exp)
    这个是非捕获组, 它跟 (exp) 的区别在于, 没有 ?: 这里匹配的内容就会捕获起来
    有 ?: 这组所匹配的内容就不捕获了