正则表达式学习笔记 之 group()和group(i)的区别
2016-05-05 21:26
363 查看
最近在做网络爬虫,需要用到正则表达式,所以学习一下,先看代码
我们的目的是获取字符串Line中的cde部分,也就是ab和fg之间的子字符串。
这里不详解ab([\\s\\S]+?)fg的含义,只要知道是满足上述要求的正则表达式即可。
在官方文档jdk中对group()的定义如下
这里的捕获组数,简单来说就是,正则表达式中有多少个括号,通过groupCount()获取捕获组数
group()和group(0)等价,就是把所有的组数一起获取,在上面的例子中,正则出来的结果是:bcdef
group(1)表示的是获取第一组,也就是第一个括号中的正则出来的字符串,在上面的例子中,正则出来的结果是:b
group(2)表示的是获取第二组,也就是第二个括号中的正则出来的字符串,在上面的例子中,正则出来的结果是:cde
group(3)表示的是获取第三组,也就是第三个括号中的正则出来的字符串,在上面的例子中,正则出来的结果是:f
那么问题来了,如果String regular = "b([\\s\\S]+?)f";
把b和f的括号去掉,结果使用groupCount()获取的组数为1,而不是之前的3。
也就是说,group(1)获取的是cde,而不是之前的b。
值得注意的是group()会出现越界问题,要注意。
public class Main{ public static void main(String[] args){ long start = System.currentTimeMillis(); Scanner in = new Scanner(System.in); //开始正则 String Line = "abcdefg"; String regular = "(b)([\\s\\S]+?)(f)"; System.out.println(getRegular(Line, regular).get(0)); //结束正则 long end = System.currentTimeMillis(); System.out.println("\n用时:"+(end-start)/1000f+"秒"); } private static List<String> getRegular(String line, String regular) { List<String> code = new ArrayList<String>(); Pattern pattern = Pattern.compile(regular); Matcher matcher = pattern.matcher(line); while(matcher.find()){ code.add(matcher.group(1));//问题是这里的group的参数 } return code; } }
我们的目的是获取字符串Line中的cde部分,也就是ab和fg之间的子字符串。
这里不详解ab([\\s\\S]+?)fg的含义,只要知道是满足上述要求的正则表达式即可。
在官方文档jdk中对group()的定义如下
String group(); //返回由以前匹配操作所匹配的输入子序列。 String group(int group); //返回在以前匹配操作期间由给定组捕获的输入子序列。 int groupCount(); //返回此匹配器模式中的捕获组数。
这里的捕获组数,简单来说就是,正则表达式中有多少个括号,通过groupCount()获取捕获组数
group()和group(0)等价,就是把所有的组数一起获取,在上面的例子中,正则出来的结果是:bcdef
group(1)表示的是获取第一组,也就是第一个括号中的正则出来的字符串,在上面的例子中,正则出来的结果是:b
group(2)表示的是获取第二组,也就是第二个括号中的正则出来的字符串,在上面的例子中,正则出来的结果是:cde
group(3)表示的是获取第三组,也就是第三个括号中的正则出来的字符串,在上面的例子中,正则出来的结果是:f
那么问题来了,如果String regular = "b([\\s\\S]+?)f";
把b和f的括号去掉,结果使用groupCount()获取的组数为1,而不是之前的3。
也就是说,group(1)获取的是cde,而不是之前的b。
值得注意的是group()会出现越界问题,要注意。
相关文章推荐
- 01智力题
- HDOJ(HDU) 2201 熊猫阿波的故事(概率问题)
- zoj3279 ants 线段树
- 《Windows核心编程》---Interlocked原子访问系列函数
- AsyncTask输入参数
- HDOJ(HDU) 2201 熊猫阿波的故事(概率问题)
- 学习android笔记(1):隐藏系统自定义titleBar
- Objective-C的appendString,appendFormat 用法
- Java之int与Integer区别
- Latex 学习
- 访问控制符
- 大数相乘问题
- leetcode_098 Validate Binary Search Tree
- 面向项目(一) —— 代码编写
- Eclipse中项目Project Explorer视图与Package Explorer视图
- 学习进度条
- [iOS]详解调整UIButton的title和image的位置
- 第十周项目—阅读程序,写出执行结果(4)
- Latex 学习
- 1011 Problem K