随笔-16  评论-54  文章-0  trackbacks-0

   jdk提供的正则表达式是非常强大的,只要用过正则表达式的程序员应该是为其功能叹为观止。不过,正则表达式中的一个group概念相信应该不多人熟悉。

    正则表达式中的group,主要是用来区分子序列的,所谓子序列是用()之内的表达式。下面以一段程序为例

        String regex = "\\$\\{(I)(love)(java)\\}";
        System.out.println(Pattern.compile(regex).matcher("${Ilovejava}P)").groupCount());

 运行上面的代码段,结果为:3
 其中(I)为一个组, (love)为一个组,(java)为一个组。

  
  也许有人觉得这只是一个小功能,但是正则表达式的group,还有一个更加强大的地方就是在String.replaceAll方法中。
  public StringreplaceAll(String regex,
                         String replacement)

 其中第一个参数当然是政则表达式,第二个一般是普通的文本;但是第二个参数可以应用group的地方,这个功能用在一些场合是非常方便的。
      比如,下面这个例子  <driverClass>${driverClass}</driverClass>,要将${}去掉,即将这个例子替换成<driverClass>driverClass</driverClass>,可以用下面的代码来替换。例如
        String text = "<driverClass>${driverClass}</driverClass>";
        String result = replaceStr(text,"\\$\\{(driverClass)\\}","$1");
        System.out.println("result is:"+result);

   运行结果:result is:<driverClass>driverClass</driverClass>
  从上面可以看出,$1就是正则表达式中匹配的第一个序列,同样$2...表示第几个序列。如果$index中的index超出了表达式中子序列的个数的话,将抛出异常信息。 $0表示整个正则表达式。
posted on 2006-08-15 15:30 jspark 阅读(481) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: