正则练习网址: https://www.codejiaonang.com/
正则在线测试网站: https://regexr-cn.com/
一、正则表达式入门
1.1字符组
正则表达式中字符组使用中括号([])包裹,作用是匹配中括号里面的元素任意一次。如下:
1.1.1字符组中横杠(-)表示区间
字符组中可以使用横杠来表示区间,省去大量写操作。
如图:
1.1.2特殊字符需转义
如果需要再字符组内对横杠(包括其他特殊字符)进行匹配,需要再“-”前面加上转义字符:
1.1.3取反
如果不想取某一类字符可使用“^”对其取反,如下图:
总结
1.2快捷方式
1.2.1 \d匹配数字 \w匹配字符(特殊字符除外)
\d
表示匹配所有数字,\w
表示匹配所有字符,如下图:
1.2.2 \s匹配空格
可以使用\s来匹配空格和缩进:
1.2.3匹配单词边界
匹配内容中完整的单词:
1.2.4快捷方式取反
将\W
为\w
的取反,\D
为\d
的取反,\S
为\s
的取反。如:
1.2.4开始和结束
目标前使用^
可以匹配开始位置字符,在目标后使用$
可以匹配结束位置的字符:
1.2.5任意字符
使用点(.)可以匹配任意字符(除换行符即\n
):
1.2.6 可选字符
匹配一个可以出现也可以不出现的字符:
总结
1.3匹配多个数据
1.3.1 重复次数
在所需要匹配的字符后面加上大括号,里面填充数字,这个数字表示重复的次数:
1.3.2 重复区间
使用大括号内的数字区间可匹配响应范围个数的字符:
如果在后面加上了?
,就会只匹配区间开始数量的字符,在这里?
表示非贪婪模式:
如果大括号使用前闭后开的形式,表示匹配第一元素开始以上的内容:
1.3.3 开闭区间
+
相当于{1,}
,*
相当于{0,}
:
1.3.4 匹配所有手机号码
1.3.4 匹配所有网址
二、正则表达式进阶
2.1分组与溯回引用
2.1.1分组
在正则表达式中还提供了一种将表达式分组的机制,当使用分组时,除了获得整个匹配。还能够在匹配中选择每一个分组。
要实现分组使用()
即可。如下:
2.1.2 或者条件
使用分组的同时还可以使用 或者(or)条件:
2.1.3 非捕获分组
有时候,我们并不需要捕获某个分组的内容,但是又想使用分组的特性。
这个时候就可以使用非捕获组(?:表达式)
,从而不捕获数据,还能使用分组的功能。
2.1.4 回溯引用
那如果想让后面分组的正则和第一个分组的正则匹配同样的数据
可以使用分组的回溯引用,使用\N
可以引用编号为N
的分组,如下:
2.2先行断言
2.2.1 正向先行断言
正向先行断言:(?=表达式)
,指在某个位置向右看,表示所在位置右侧必须能匹配表达式,但只提取该位置的数据:
2.2.1 反向先行断言
反向先行断言(?!表达式)的作用是保证右边不能出现某字符
2.3后行断言
正向后行断言
正向后行断言:(?<=表达式)
,指在某个位置向左看,表示所在位置左侧必须能匹配表达式
反向后行断言
反向后行断言:(?<!表达式)
,指在某个位置向左看,表示所在位置左侧不能匹配表达式