云中烛火

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

java正则表达式相关的类在java.util.regex包中,有两个类:PatternMatcher类。

正则表达式速查表

Pattern类和Matcher类

Pattern主要用它来编译一个正则表达式,生成此类的一个实例。再用此实例来创建matcher对象,依据正则表达式,该对象可以与任意的字符序列匹配。

常见用法为:

 Pattern p = Pattern.compile("a*b");
 Matcher m = p.matcher("aaaaab");
 boolean b = m.matches();
 

String[]  Pattern.split(CharSequence input)

Pattern p = Pattern.compile("\\w+");
String [] str = p.split("你好World我是Hello");

结果:str[0]="你好",str[1]="我是"

 

boolean  Pattern.matches(String regex,CharSequence input)  静态方法,编译给定的正则表达式并尝试与给定的字符序列匹配

此方法的源码为:

 public static boolean matches(String regex, CharSequence input) {
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        return m.matches();
    }

 

 

boolean  Matcher.find() / String  Matcher.group()/int  Matcher.groupCount()

在此之前,需要先了解一下Java正则表达式中的捕获组的概念。捕获组也就是Pattern中以括号对“()”分割出的子Pattern。至于为什么要用捕获组呢,主要是为了能找出在一次匹配中你更关心的部分。

 

捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组: 

1     ((A)(B(C)))
2     \A
3     (B(C))
4     (C)

 

 

组零始终代表整个表达式。

之所以这样命名捕获组是因为在匹配中,保存了与这些组匹配的输入序列的每个子序列。

 

String regex = "(x)(y\\w*)(z)";
String input = "axy123z,xy78z";
        
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
        
System.out.println(matcher.groupCount());//结果是3    主要是以括号来分割计算出来;如果没有括号,返回值就为0
while(matcher.find()){//尝试查找与该模式匹配的输入序列的下一个子序列
        /*
         * group(int group)此方法一般针对于捕获组来用的,
         *     如果正则表达式中没有用到捕获组,只能用group()和group(0)方法,否则报异常
         */
        System.out.println("matcher.group()与matcher.group(0)是等价的   结果为:"+matcher.group());
        System.out.println("matcher.group(1)结果为:"+matcher.group(1));
        System.out.println("matcher.group(2)结果为:"+matcher.group(2));
        System.out.println("matcher.group(3)结果为:"+matcher.group(3));
}

 

结果为:

 

 

posted on 2015-05-07 21:35  云中烛火  阅读(127)  评论(0)    收藏  举报