目录
什么是分组
在正则表达式中用()进行分组
如"(\\w|\\d){2,5}[2345]\\d+(\\w&&[^._])"
而每一个分组都有自己的序号
以左括号为标准
第一个出现的为第一组
其中(\\w|\\d)是第一组,(\\w&&[^._])是二组
类似嵌套的正则(a*|(b+{9})
其中该正则整体为第一组,(b+{9})为第二组
分组的应用
1:爬取内容需要包含重复内容
如爬取aaa1234123aaa bbbdsffsdbbb sssdfsdsss
等开始字符与结束字符相同的的文本时
正则表达式为(\\.+)\\.*\\1
\\后面的数字为组号,为几就代表与组几的内容应相同
static String s="aaadfgaaa笑死我了aaasfdsfaaaadfgkjdfklsjkajgdsldfjkgdjgiekdnvmkswd笑死我了";
static Pattern p=Pattern.compile("(\\w+)\\w+\\1");
static Matcher m=p.matcher(s);
public static void main(String[] args) {
while(m.find()){
String l= m.group();
System.out.println(l);
}
}
2:在字符串中替换掉重复的文本
在这正则表达式外使用分组的内容时使用$表示组别
String s="我要成神神神神神神神神神神神神神神神神神神神神神神";
String s1=s.replaceAll("(.)\\1+","$1");
System.out.println(s1);
括号不代表分组情况
(?:正则) 含义:获取所有符合的文本 例:Java(?:8|11|17)
即表示获取在Java后符合正则表达式我文本整体
(?=正则) 含义获取符合文本的前半部分 Java(?=8|11|17)
(?!正则) 获取不是指定内容的文本的前半部分 Java(?!8|11|17)