Java正则表达式小程序的错误

来源:百度知道 编辑:UC知道 时间:2024/09/22 11:55:33
package dealwithstring;

import java.util.regex.*;

public class Matcherfind {
public static void main(String args[]){
String regex = "a[a-z]c";
Pattern p = Pattern.compile(regex);
String input = "abc,hazc,ajfakc,iealc";
Matcher m = p.matcher(input);
if(m.find()){
System.out.println(m.groupCount());
}
System.out.println(m.group(0));
}
}
为什么结果显示是:
0
abc
能显示abc就说明匹配到了啊
明明应该显示4个的啊~

groupCount() 返回此匹配器模式中的捕获组数。

正则表达式
写成: (a[a-z]c) //这样算一组
写成: (a[a-z])(c) //这样算两组

如果写成这样:(a[a-z])(c)
则:
m.group() //返回: abc
m.group(0) //同m.group()
m.group(1) ////返回: ab
m.group(2) ////返回: c

你概念理解有误

m.groupCount()的意思是你的regex中有几对括号啊

if(m.find())只能找到input中第一个匹配的,用while(m.find())就行了

这个group的意思并不是匹配结果数,而是对正则表达式的分组,比如把"a[a-z]c"写成"(a)[a-e](c)",这个group(0)就等效于"a[a-z]c",group(1)就等效于"a",group(2)就等效于"c",可以这样写代码:
while(m.find()){
System.out.println(m.groupCount());
for (int i = 0; i <= m.groupCount(); i++) {
System.out.println(m.group(i));
}
}
就可以看到效果了。

if(m.find())是这句的问题,如果找到,也就是找到abc的时候,if成立了,所以就不会往后走了,而是把它显示出来~~
如果你想显示所有的,就改为
while(m.find()){
......
}
这样就可以全部显示出来了~~