正则表达式入门
基础入门
字符组
如果只是使用正则表达式来匹配文本,没有什么意义。毕竟检测一个文本中是否有另一个字符串本来就非常简单。
正则表达式强大的地方在于它可以迅速地用极简单的方式达到字符串的复杂控制。字符组([ ])允许匹配一组可能出现的字符 例如:
可以发现[Pp]既可以匹配大写的P也可以匹配小写的p
正则表达式引擎再字符组中使用连字符(-)代表区间。依照这个规则,我们可以总结出三点: 1、要匹配任意数字可以使用[0-9]
2、如果想要匹配所有小写字母,可以写成[a-z] 3、想要匹配所有大写字母可以写成[A-Z] 例如:
匹配特殊字符
正则表达式使用了-号代表区间,但是我们有时候需要匹配的符号就是-号,该怎么办呢? 这个时候我们需要对-号进行转义操作,即-
在正则中使用\就可以进行对特殊符号进行转义。对-进行转义就可以表示为-,即-就代表了-号本身。 例如:
取反
可以通过在字符数组开头使用^字符实现取反操作,从而可以反转一个字符组(意味着会匹配任何指定字符之外的所有字符)。
例如:
这里n[^e ]的意思就是n后面的字母不能为e
快捷方式
\d 匹配任意数字(0-9) \w 匹配字母、数字、下划线 \s 匹配空白字符 比如tab、空格、换行符 \b 匹配的是单词的边界
取反的话变成大写字母
^匹配开头 $匹配结尾
. 字符代表匹配任何单个字符,它智能出现在方括号以外,但是不能匹配\n
可选字符 我们可以使用?符号指定一个字符,字符组或其他基本单元可选,这意味着正则表达式引擎将会期望该字符出现零次或一次。
匹配多个数据 {3,}匹配3或更多的前的标记
+等价于{1,}
*等价于{0,}
正则表达式进阶
分组与回溯引用
要实现分组很简单,使用()即可
分组有一个非常重要的功能——捕获数据。所以()被称为捕获分组,用来捕获数据。当我们想要从匹配中提取关键数据的时候就可以使用分组。
或者条件 例如要提取所有图片文件的后缀名可以在各个后缀名直接加上一个|符号
非捕获分组 (?:表达式) 例如想要匹配两个字母组成的单词或者四个字母组成的单词就可以使用非捕获分组
分组的回溯应用 如果想让后面分组的正则和第一个分组的正则匹配同样的数据该如何做? 使用\N可以引用编号为N的分组
很多人也称先行断言和后行断言为环视,也有人叫预搜索。 先行断言和后行断言有四种:
1、正向先行断言
2、反向先行断言
3、正向后行断言
4、反向后行断言
先行断言
正向先行断言:(?=表达式),指在某个位置向右看,表示所在位置右侧必须能匹配表达式
反向先行断言:(?!表达式) 右边不能出现某字符
后行断言
先行断言是从左往右看的,那么后行断言就是从后往前看的 正向后行断言:(?<=表达式)xxx(?=表达式)
反向后行断言:(?<!表达式)xxx(?!表达式)