首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java 正则表达式 matcher.find()与group(i),该怎么解决

2012-01-15 
java 正则表达式 matcher.find()与group(i)find()以后的group(0)是字符串自己,但是以后的呢是找符合正则表

java 正则表达式 matcher.find()与group(i)
find()以后的group(0)是字符串自己,但是以后的呢是找符合正则表达式的子串么?
例如下面一段程序:
String regEx="^.+\\\\(.+)$";

String str="c:\\dir1\\dir2\\name.txt";

Pattern p=Pattern.compile(regEx);

Matcher m=p.matcher(str);

boolean rs=m.matches();

for(int i=0;i<=m.groupCount();i++){

System.out.println(m.group(i));

}
为什么输出的是下面的阿:
c:\dir1\dir2\name.txt
name.txt
我的意思是name.txt又不符合表达式regEx

[解决办法]

引用楼主 yanlimin9 的帖子:
find()以后的group(0)是字符串自己,但是以后的呢是找符合正则表达式的子串么?
例如下面一段程序:
String regEx="^.+\\\\(.+)$"; //你有(.+)分组了,当然会回来,改成(?:.+)只分组,不捕获

String str="c:\\dir1\\dir2\\name.txt";

Pattern p=Pattern.compile(regEx);

Matcher m=p.matcher(str);

boolean rs=m.matches();

for(int i=0;i <=m.groupCount();i++){

System.out.println(m.group(i));

}
为什么输出的是下面的阿:
c:\dir1\dir2\name.…

[解决办法]
name.txt 匹配的是(.+)
^.+\\\\(.+)$" ,这个表达式Group结果有两个,第一个是自己,後面的话有几个()就有几个结果,但注意结果是最后符合(.+)的那个。
^.+\\\\相当于c:\dir1\dir2\
(.+)就匹配上了name.txt。

JDK上有详细说明。

[解决办法]
group是用来存放正则表达式的匹配结果的,就是一个变量,其中的内容是匹配结果!
举例:
Java code
  public static void main(String[] args) {      String input = "\\\\u1234\\\\u34fa";    String regex = "\\\\u([0-9a-f]{4})";    Pattern p = Pattern.compile(regex);    Matcher m = p.matcher(input);    while (m.find()) {        System.out.println(m.group() + "   " + m.group(1) );    }    } 

热点排行