group()和group(i)的区别
前言
最近在做网络爬虫,需要用到正则表达式,所以学习一下。
先看代码
1 | public class Main{ |
我们的目的是获取字符串Line
中的cde
部分,也就是ab
和fg
之间的子字符串。
这里不详解ab([\\s\\S]+?)fg
的含义,只要知道是满足上述要求的正则表达式即可。
在官方文档jdk
中对group()
的定义如下
String group(); | 返回由以前匹配操作所匹配的输入子序列。 |
String group(int group); | 返回在以前匹配操作期间由给定组捕获的输入子序列。 |
int groupCount(); | 返回此匹配器模式中的捕获组数。 |
这里的捕获组数,简单来说就是,正则表达式中有多少个括号,通过groupCount()
获取捕获组数
函数 | 获取数据组 | (b)([\\s\\S]+?)(f) 对abcdefg 正则结果 |
---|---|---|
group() | 所有组 | bcdef |
group(0) | 所有组 | bcdef |
group(1) | 第1组 | b |
group(2) | 第2组 | cde |
group(3) | 第3组 | f |
那么问题来了,如果String regular = "b([\\s\\S]+?)f";
把b
和f
的括号去掉,结果使用groupCount()
获取的组数为1
,而不是之前的3
。
也就是说,group(1)
获取的是cde
,而不是之前的b
。
值得注意的是group()
会出现越界问题,要注意。