先来看个例子
把逗号之间的数字和逗号括号分隔的数字取出来
String s=" $this->data['singlev300']=bindec(substr($this->dataBin,5960,81));
Pattern ss1=Pattern.compile("(,(.*?),)([0-9]+)");
Matcher m1=ss1.matcher(s);
while(m1.find()){
System.out.println(m1.group(0));
System.out.println(m1.group(1));
System.out.println(m1.group(2));
System.out.println(m1.group(3));
}
结果为:
Pattern类
pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
Matcher类
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
捕获组
捕获组是把多个字符当一个单独单元进行处理的方法,它通过对括号内的字符分组来创建。
例如,正则表达式 (dog) 创建了单一分组,组里包含"d",“o”,和"g"。
捕获组是通过从左至右计算其开括号来编号。
可以通过调用 matcher 对象的 groupCount 方法来查看表达式有多少个分组。groupCount 方法返回一个 int 值,表示matcher对象当前有多个捕获组。
还有一个特殊的组(group(0)),它总是代表整个表达式。该组不包括在 groupCount 的返回值中。
分析结果:
第一行输出的为整个表达式的值。
第二行输出的为第2 个捕获组的值
第三行输出的为第3个捕获组的值,即第一个括号里的第一个括号里的值
第四行输出的为第4个表达式的值,即最后一个括号