正则表达式相关知识点
转义字符
如果想要匹配特殊字符的话,就得使用元字符 \
, 它是转义字符字符,让其后续的字符失去其本来的含义。
特殊字符 | 正则表达式 | 记忆方式 |
换行符 | | new line |
换页符 | | form feed |
回车符 | | return |
空白符 | | space |
制表符 | | tab |
垂直制表符 | | vertical tab |
回退符 | | backspace,之所以使用[]符号是避免和\b重复 |
匹配多个字符的简便正则表达式
匹配区间 | 正则表达式 | 记忆方式 |
除了换行符之外的任何字符 | | 句号,除了句子结束符 |
单个数字, | | digit |
除了 | | not digit |
包括下划线在内的单个字符, | | word |
非单字字符 | | not word |
匹配空白字符,包括空格、制表符、换页符和换行符 | | space |
匹配非空白字符 | | not space |
循环与重复
匹配规则 | 元字符 |
0次或1次 | |
0次或无数次 | |
1次或无数次 | |
特定次数 | |
字符串边界
边界和标志 | 正则表达式 | 记忆方式 |
单词边界 | | boundary |
非单词边界 | | not boundary |
字符串开头 | | - |
字符串结尾 | | - |
多行模式 | | multiple of lines |
忽略大小写 | | ignore case, case-insensitive |
全局模式 | | global |
回溯引用
所谓 回溯引用(backreference) 指的是模式的后面部分引用前面已经匹配到的子字符串。
回溯引用的语法 \1,\2,....,
:
-
\1
:表示引用的第一个子表达式 -
\2
:表示引用的第二个子表达式 - …
-
\0
:则表示整个表达式
例子:假设现在要在下面这个文本里匹配两个连续相同的单词?
用 $1,$2...
来引用要被替换的字符串。
不想子表达式被引用,可以使用非捕获正则 (?:regex)
这样就可以避免浪费内存。
(负)前向查找
前向查找:凡是以 (?=regex)
包含的子表达式在匹配过程中都会用来限制前面的表达式的匹配。
负前向查找:语法 (?!regex)
(负)后向查找
后向查找:后向查找(lookbehind)是通过指定一个子表达式,然后从符合这个子表达式的位置出发开始查找符合规则的字串。语法:(?<=regex)
负后向查找:语法:(?<!regex)
可以将字符串进行翻转,然后再使用前向查找,作完处理后再翻转回来。
回溯查找 | 正则 | 记忆方式 |
引用 | | 转义+数字 |
非捕获组 | | 引用表达式(()), 本身不被消费(?),引用(😃 |
前向查找 | | 引用子表达式(()),本身不被消费(?), 正向的查找(=) |
前向负查找 | | 引用子表达式(()),本身不被消费(?), 负向的查找(!) |
后向查找 | | 引用子表达式(()),本身不被消费(?), 后向的(<,开口往后),正的查找(=) |
后向负查找 | | 引用子表达式(()),本身不被消费(?), 后向的(<,开口往后),负的查找(!) |
推荐 vscode 插件:any-rule
安装
vscode 应用商店中搜索 any-rule
,安装即可。
使用
方式1:
右键选择 🦕正则大全
方式2:
在代码任意位置输入**@zz**
。
图解正则
每次在 any-rule 中选择正则后会弹出提示, 可点击图解正则
点击后可以看到正则解析:https://regexper.com/
也可以使用正则表达式可视化工具:https://jex.im/regulex/#!flags=&re= 查看正则图解
any-rule 正则大全测试
我们可以打开:https://any86.github.io/any-rule/,我们可以查找到我们需要正则关键字,然后输入去验证。
any-rule 正则大全(已收录 83)
下面的正则大全来自:https://github.com/any86/any-rule
火车车次
手机机身码(IMEI)
必须带端口号的网址(或ip)
网址(URL)
统一社会信用代码
统一社会信用代码(宽松匹配)(15位/18位/20位数字/字母)
迅雷链接
ed2k链接(宽松匹配)
磁力链接(宽松匹配)
子网掩码(不包含 0.0.0.0)
linux"隐藏文件"路径
linux文件夹路径
linux文件路径
window文件夹路径
window下文件路径
股票代码(A股)
大于等于0, 小于等于150, 支持小数位出现5, 如145.5, 用于判断考卷分数
html注释
md5格式(32位)
GUID/UUID
版本号(version)格式必须为X.Y.Z
视频(video)链接地址(视频格式可按需增删)
图片(image)链接地址(图片格式可按需增删)
24小时制时间(HH:mm:ss)
12小时制时间(hh:mm:ss)
base64格式
数字/货币金额(支持负数、千分位分隔符)
数字/货币金额 (只支持正数、不支持校验千分位分隔符)
银行卡号
10到30位, 覆盖对公/私账户, 参考微信支付
中文姓名
英文姓名
车牌号(新能源)
车牌号(非新能源)
车牌号(新能源+非新能源)
手机号(mobile phone)中国(严谨), 根据工信部2019年最新公布的手机号段
手机号(mobile phone)中国(宽松), 只要是13,14,15,16,17,18,19开头即可
手机号(mobile phone)中国(最宽松), 只要是1开头即可, 如果你的手机号是用来接收短信, 优先建议选择这一条
日期(宽松)
日期(严谨, 支持闰年判断)
中国省
可以被moment转化成功的时间 YYYYMMDD HH:mm:ss
email(邮箱)
座机(tel phone)电话(国内),如: 0341-86091234
身份证号(1代,15位数字)
身份证号(2代,18位数字),最后一位是校验位,可能为数字或字符X
身份证号, 支持1/2代(15位/18位数字)
护照(包含香港、澳门)
帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线组合
中文/汉字
小数
只包含数字
html标签(宽松匹配)
匹配中文汉字和中文标点
qq号格式正确
数字和字母组成
英文字母
小写英文字母组成
大写英文字母
密码强度校验,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
用户名校验,4到16位(字母,数字,下划线,减号)
ip-v4[:端口]
ip-v6[:端口]
16进制颜色
微信号(wx),6至20位,以字母开头,字母,数字,减号,下划线
邮政编码(中国)
中文和数字
不能包含字母
java包名
mac地址
匹配连续重复的字符
数字和英文字母组成,并且同时含有数字和英文字母
香港身份证
澳门身份证
台湾身份证
大写字母,小写字母,数字,特殊符号 @#$%^&*
~()-+=` 中任意3项密码
ASCII码表中的全部的特殊字符
正整数,不包含0
负整数,不包含0
整数
浮点数
浮点数(严格)
email(支持中文邮箱)
域名(非网址, 不包含协议)
参考资料
- 正则表达式不要背
- 正则大全