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
------解决方案--------------------
------解决方案--------------------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) );
}
}