分组匹配:
正则表达式分组:
如果想匹配3个数字,正则表达式可以用如下写法:
\d{3}
以上代码使用重复量词可以匹配3位数字。
但是在实际应用中,往往需要重复多个字符,例如我想重复ab两个字符,使用以下代码就不合适了,代码如下:
ab{3}
以上正则表达式只能够重复3次b。
为了实现重复多个字符可以使用小括号来指定子表达式或者说分组来实现此功能,例如:
(ab){3}
上面的正则就可以重复ab了。
所谓的分组就是使用小括号将一些项包括起来,使其成为独立的逻辑域,那么就可以像处理一个独立单元一样去处理小括号的内容。
下面看一段代码实例:
(\d{1,3}\.){3}\d{1,3}
上面是一个简单的ip匹配正则表达式。由小括号包裹的内容会被作为一个独立的逻辑域进行操作。
分组的作用:
在正则表达式中,分组具有举足轻重的作用,下面就简单对它的功能做一下简单的介绍。
/**
* 分组匹配
*
*/
@Test
public void test6() {
String regex = "(%)(.*?)(%)";//()表示分组
String str = "%akhscgaijgs% %dgqydfwydf% %aswdd%";
System.out.println(str.replaceAll(regex, "$2"));//$表示组,$2表示组2
System.out.println(str.replaceAll(regex, "$1aaaa$3"));
}
@Test
public void test7() {
Pattern pattern = Pattern.compile("(%)(.*?)(%)");//模式对象
//pattern是模式对象,此方法会将匹配到的东西遍历出来
String str = "%akhscgaijgs% %dgqydfwydf% %aswdd%";
Matcher m = pattern.matcher(str);
int i = 0;
while(m.find()) {//find为从匹配的对象里面去查找
i++;
System.out.println(m.group(1) + " aaa "+ m.group(3) + " startIndex"+m.start()+",endIndex:" + m.end());
//此处为输入的为所替换的组号,,而将其他组号替换出来
}
}