在上一篇博文里我们学习了基础的正则表达式,学会这些还不足以应对工作学习,现在开始学习进阶篇的正则表达式。
目录
1.分组
在正则表达式中提供了一种将表达式分组的机制,当使用分组时,除了获得整个匹配。还能够在匹配中选择每一个分组。分组的一个重要功能就是捕获数据,即将需要的数据在字符串中提取出来。使用()即可完成分组的操作。
如果我们仅想将字符分组却不捕获字符可以使用(?: 表达式)来实现
分组的实践:如下,我们需要将日期中的数字部分提取出来,可使用以下表达式
在上式中,\d{4}表示匹配4个数字,[-,/\s?]表示字符出现0或1次,\d{1,2}表示数字出现1或2次。
2.或者
有时我们想要提取的不是单一种类的字符而是多个字符,这是就可以使用或者|来实现
3.分组回溯
在分组中我们可以定义一个分组,这个分组在以后出现时可以直接用数字代替使用,使用\N可以引用编号为N的分组,注意分组与其子分组是同一个而不是同一类。
4.先行断言
先行断言可以分为两种:正向先行断言、反向先行断言
正向先行断言:(?=表达式),指在某个位置向右看,表示所在位置右侧必须能匹配表达式
在上图中我们需要的是喜欢你中的喜欢二字,即喜欢后必须有你才可。
反向先行断言:(?!表达式),作用是保证右边不能出现某字符。
上图中就是喜欢后面不能有你。
5.后行断言
后行断言与先行断言正好相反:先行断言从左往右看,后行断言从右往左看。
正向后行断言:(?<=表达式),指在某个位置向左看,表示所在位置左侧必须能匹配表达式
上图使用了正向先行断言以及正向后行断言,实现的功能是喜欢二字前有我,后有你。
反向后行断言:(?<!表达式),指在某个位置向左看,表示所在位置左侧不能匹配表达式
上图使用了反向先行断言以及反向后行断言,实现的功能是喜欢二字前没有我,后没有你。
到此为止,正则表达式已经基本结束了,这篇博文就当作日后学习的笔记吧。