正则表达式(Regular Expression)又称规则表达式,在代码中常简写为Regex、Regexp或RE,它是一种文本模式,包括普通字符(例如a到z之间的字母)和特殊字符(称为"元字符")。
作用
一个正则表达式是一种从左到右匹配主体字符串的模式,它可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表单、提取字符串等等。
由一些字符(如字母、数字或符号)组成的最简单的正则表达式。
实例
正则表达式主要依赖于元字符。 元字符不代表他们本身的字面意思而是有有特殊的含义。
元字符
描述
匹配除换行符以外的任意字符
[ ]
字符类。匹配方括号内的任意字符
[^ ]
否定的字符种类。匹配除了方括号里的任意字符
匹配前面的子表达式零次或多次
匹配前面的子表达式一次或多次
匹配前面的子表达式零次或一次
{n,m}
匹配前面的子表达式最少n次最多m次
( )
匹配分组。组合一个子表达式
或运算符,匹配符号前或后的字符
转义字符,用于匹配一些保留的字符
从开头进行匹配
从末端进行匹配
.匹配任意单个字符,但不匹配换行符。
示例1
示例2
方括号[]用来指定一个字符类,在方括号中的字符都将被匹配。字符类不会被顺序影响,还可以使用连字符-来指定范围。
示例1
示例2
当符号^用在方括号[]内表示这个字符类是否定的。
示例1
示例2
当一个子表达式后面跟着字符+ * ?,是用来指定匹配该子表达式的次数。
*匹配在*之前的字符出现大于等于0次。
示例1
需要注意的是,e 出现0次的地方也会被标记
示例2
匹配所有字符
+匹配+之前的字符出现大于等于1次。
示例1
示例2
匹配以 e 开头,以 u 结尾的内容
?匹配?之前的字符出现0或者1次,即表示前面的字符是可选的。
示例
{}常用来限定子表达式可以出现的次数。比如{n,m}表示出现最少 n 次最多 m 次,{n,}表示出现最少 n 次,{,m}表示出现最多 m 次,{n}表示固定出现 n 次。
示例1
示例2
示例3
括号()用来指定一个子表达式,在括号中的内容会被看作一个整体。比如 (xy)* 匹配连续出现零个或多个的 xy,而 xy* 则匹配连续出现零个或多个的 y。
示例1
示例2
|用于判断条件,表示或者。
示例
反斜线\用于将特殊字符转义为原义字符,特殊字符如{ } [ ] / \ + * . $ ^ | ?
示例
锚点可以匹配指定开头或结尾的字符串。^ 指定开头,$ 指定结尾。
示例1
示例2
简写
描述
\w
匹配所有字母数字,等同 [a-zA-Z0-9_]
\W
匹配所有非字母数字,等同 [^\w]
\d
匹配数字,等同 [0-9]
\D
匹配非数字,等同 [^\d]
\s
匹配所有空格字符,等同 [\t\n\f\r\p{Z}]
\S
匹配所有非空格字符: [^\s]
\f
匹配一个换页符
\n
匹配一个换行符
\r
匹配一个回车符
\t
匹配一个制表符
\v
匹配一个垂直制表符
\p
匹配 CR/LF,等同 \r\n
需要注意的是,\s \S \f \n \r \t \v \p 所匹配的字符均为非打印字符
断言分为先行断言和后发断言,它们都属于非捕获组(用于匹配模式,但不包括在匹配列表中)。用来筛选指定条件的匹配结果。
需要注意的是,断言必须包含在分组()内
符号
描述
?=
正先行断言-存在
?!
负先行断言-排除
?<=
正后发断言-存在
?<!
负后发断言-排除
正先行断言的筛选条件为匹配字符其后跟随断言中定义的格式。
示例
负先行断言的筛选条件为匹配字符其后不跟随断言中定义的格式。
示例
正后发断言的筛选条件为匹配字符其前跟随断言中定义的格式。
负后发断言的筛选条件为匹配字符其前不跟随断言中定义的格式。
标记也称为修饰符,作为额外的匹配策略用于修改表达式的搜索结果。标志可以任意组合使用,它也是正则表达式中的一部分。
标志
描述
全局搜索
忽略大小写
多行匹配
标记 g 用于全局搜索。即不仅返回第一个匹配结果,而是全部匹配结果。在语法章节中所有的示例均使用全局搜索。
示例
标记 i 用于忽略大小写。匹配的字符可以是大写或者小写。
示例
标记 m 用于多行匹配。比如前面说到的锚点^ $,如果想在每行的开头结尾生效,就需要使用标记 m。
示例
火车车次
手机机身码(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)链接地址(图片格式可按需增删)
base64格式
数字/货币金额(支持负数、千分位分隔符)
中文姓名
英文姓名
车牌号(新能源)
车牌号(非新能源)
车牌号(新能源+非新能源)
手机号(mobile phone)中国(严谨),根据工信部2019年最新公布的手机号段
手机号(mobile phone)中国(宽松),只要是13、14、15、16、17、18、19开头即可
手机号(mobile phone)中国(最宽松),只要是1开头即可,如果你的手机号是用来接收短信,优先建议选择这一条
日期(宽松)
日期(严谨,支持闰年判断)
中国省
身份证号(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进制颜色
邮政编码(中国)
中文和数字
不能包含字母
java包名
mac地址
匹配连续重复的字符
数字和英文字母组成,并且同时含有数字和英文字母
香港身份证
澳门身份证
台湾身份证
大写字母,小写字母,数字,特殊符号 @#$%^&*~()-+=` 中任意3项密码
ASCII码表中的全部的特殊字符
正整数,不包含0
负整数,不包含0
整数
浮点数
浮点数(严格)
域名(非网址,不包含协议)
军官/士兵证
户口薄
带有语法高亮、支持 PHP/PCRE 和 JS 语言、上下文解释、备忘单、参考和正则表达式社区的正则表达式测试工具。
提供PHP、PCRE、Python、Go、JavaScript等语言的正则表达式在线测试、生成,解析工具服务。其中的正则库及正则教程可以帮助快速方便的获取正则表达式。