java正则表达式相关的类在java.util.regex包中,有两个类:Pattern和Matcher类。
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)); }
结果为:

浙公网安备 33010602011771号