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

正则表达式find跟group详解

2012-12-26 
正则表达式find和group详解正则表达式是一个很好的东西,要使用好得好好研究。最近对find和group方法比较模

正则表达式find和group详解

正则表达式是一个很好的东西,要使用好得好好研究。最近对find和group方法比较模糊。经研究记录下笔记。

调用group()方法前,都前要用find方法。否则报错。其实看Matcher类可以看到其中有一个int[] groups;

其实这个数组就是保存group匹配的数据。首先要知道一个正则表达式之后有几组。可通过groupCount()方法得到,其实很简单,是有几对大括号就有几组。例如:

@Testpublic void testLookAhead() {Pattern p = Pattern.compile("(\\w{2})(aa)");Matcher m = p.matcher("12332aa438aaf");Assert.assertEquals(2, m.groupCount());}

?有两对大括号那就是两组了。开始看到有帖子说这有三组,把group(0)当成一组,其实group(0)和group()是相等的。然后查看group源代码发现

 public String group(int group) {        if (first < 0)            throw new IllegalStateException("No match found");        if (group < 0 || group > groupCount())            throw new IndexOutOfBoundsException("No group " + group);        if ((groups[group*2] == -1) || (groups[group*2+1] == -1))            return null;        return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();    }

?就知道group方法前,一定要find一下了,否则Matcer类中first的初始值是-1.然后调用find方法返回false的时候,first还是false,所有所有的group方法都是要在find方法返回true的情况下,也就是字符串要匹配正则表达式的。

?

然后group(1),group(2).......group(n)都是在group()返回的字符串下匹配的结果。

?

热点排行