正则表达式
练习网站
基本内容
- 字符组
[]
:表示匹配字符集里面的字符任意一次
# [Pp]ython
--> [Pp]表示匹配一个大写的P或小写的P
--> 上面的正则表达式就可以匹配Python和python
- 字符横杠
-
,放在字符组里面表示范围
# [0-9a-zA-Z]
--> 表示匹配任意一个数字、小写字母、大写字母
--> [0-9]可以理解为[0123456789],只是第二种写法太操蛋了,如果a到z的话那岂不是得写26个字符
- 特殊的字符匹配的话需要加转义字符
\
# [\-]
--> 匹配一个-字符,此时-在字符集中并非表示范围
--> 同理,要匹配其他的特殊字符,可以在前面加一个转义字符\
^
非集
# [^0-9]
--> 表示匹配一个非数字
- 快捷方式,一些特殊的表示方式
# [\d]
--> 表示匹配一个数字
# [\w]
--> 表示匹配任意一个字母、数字
# [\s]
--> 表示匹配一个空白符
# [\b]
--> 表示匹配一个边界
# 需要注意到的是,如果\后面跟的是对应得大写字母,则表示取反
# \D
--> 匹配一个非数字的字符
# \W
--> 匹配一个非\w中的字符
# \S
--> 匹配一个非空白字符
- 开始和结束
# ^f
--> 以f开头
# f$
--> 以f结尾
比如匹配一个f开头和f结尾的单词
- 匹配除
\n
之外的任意一个字符
# .
--> 匹配任意一个字符
- 可选字符
# \d?
--> 匹配一个数字0次或多次
比如,匹配beautiful和beautiul
- 匹配多个数据
{N}
# \d{9}
--> 匹配任意一个数字9次
- 匹配一个字符一定的范围{M,N}
# \d{7,9}
--> 匹配任意一个数字7到9次,取决于数字量,此种表达方式是贪婪的,即如果一个字符有8个数字,那么他不会只匹配7个
# \d{7,9}?
--> 非贪婪得匹配,如果已经匹配到了七个数字,那么不会再往后匹配
- 匹配字数开区间{M,}
# \w{1,}
--> 表示匹配一个字符一次以上,,后面没数字代表无穷
- 特殊多匹配符号
# \w+
--> + 等价于 {1,}
# \w*
--> * 等价于 {0, }
稍稍进阶初探
分组(子式)
比如要提取匹配到的字符中的某些内容,可以用()
将这些内容括起来,示例,表示一个分组
2020-01-10
2020.02.13
20231023
将年份、月份、日期提取出来
# ([\d]{4})[\-\.]?([\d]{1,2})[\-\.]?([\d]{1,2})
回溯引用
回溯指的是在后面的分组中引用前面分组中的匹配内容,比如要匹配xxxxx<\span>
<span>xxx<\span>
# <\w+>.*</\w+>
--> 当出现<span>xxxx</end>, 这样的字符也是能被匹配到的
# <(\w+)>.*</\1>
--> \1表明回溯引用分组一的匹配内容
断言
断言有四种,又可分为两种,即先行断言和后行断言
-
先行断言(从左至右看)
-
正向先行断言(从某个位置出发,其后面必须有点啥)
x(?=表达式)
-
反向先行断言(从某个位置出发,其后面必须没有啥)
x(?!表达式)
-
- 后行断言(从右至左看)
- 正向后行断言(从某个位置出发,其左边必须有点啥)
(?<=表达式)x
- 正向后行断言(从某个位置出发,其左边必须有点啥)
- 反向后行断言(从某个位置出发,其左边必须没有啥)
(?<!表达式)x