能解析 但是只能解析出最后一个组 程序如下: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)???
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)???
关注!期待高手!
Pattern p = Pattern.compile("^((?:\\(\\s\\d+\\,\\d+\\s\\)\\s)*)((?:\\[\\s\\(\\s3\\,5\\s\\)\\s\\(\\s4\\,5\\s\\)\\s\\]\\s)*)$");
("^(\\(\\s\\d+\\,\\d+\\s\\)+\\s)*+(\\[\\s+(\\(\\s\\d+\\,\\d+\\s\\)+\\s)+\\]\\s)*$"结果还是一样,没有任何区别。为什么??
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) 的区别在于, 没有 ?: 这里匹配的内容就会捕获起来
有 ?: 这组所匹配的内容就不捕获了