正则表达式
基础正则表达式
字符
表达式 | 描述 |
---|
[abc] | 字符集。匹配集合中所含的任一字符。 |
[^abc] | 否定字符集。匹配任何不在集合中的字符。 |
[a-z] | 字符范围。匹配指定范围内的任意字符。 |
. | 匹配除换行符以外的任何单个字符。 |
\ | 转义字符。 |
\w | 匹配任何字母数字,包括下划线(等价于[A-Za-z0-9_] )。 |
\W | 匹配任何非字母数字(等价于[^A-Za-z0-9_] )。 |
\d | 数字。匹配任何数字。 |
\D | 非数字。匹配任何非数字字符。 |
\s | 空白。匹配任何空白字符,包括空格、制表符等。 |
\S | 非空白。匹配任何非空白字符。 |
分组和引用
表达式 | 描述 |
---|
(expression) | 分组。匹配括号里的整个表达式。 |
(?:expression) | 非捕获分组。匹配括号里的整个字符串但不获取匹配结果,拿不到分组引用。 |
\num | 对前面所匹配分组的引用。比如(\d)\1 可以匹配两个相同的数字,(Code)(Sheep)\1\2 则可以匹配CodeSheepCodeSheep 。 |
锚点/边界
表达式 | 描述 |
---|
^ | 匹配字符串或行开头。 |
$ | 匹配字符串或行结尾。 |
\b | 匹配单词边界。比如Sheep\b 可以匹配CodeSheep 末尾的Sheep ,不能匹配CodeSheepCode 中的Sheep |
\B | 匹配非单词边界。比如Code\B 可以匹配HelloCodeSheep 中的Code ,不能匹配HelloCode 中的Code 。 |
数量表示
表达式 | 描述 |
---|
? | 匹配前面的表达式0个或1个。即表示可选项。 |
+ | 匹配前面的表达式至少1个。 |
* | 匹配前面的表达式0个或多个。 |
| | 或运算符。并集,可以匹配符号前后的表达式。 |
{m} | 匹配前面的表达式m个。 |
{m,} | 匹配前面的表达式最少m个。 |
{m,n} | 匹配前面的表达式最少m个,最多n个。 |
预查断言
表达式 | 描述 |
---|
(?=) | 正向预查。比如Code(?=Sheep) 能匹配CodeSheep 中的Code ,但不能匹配CodePig 中的Code 。 |
(?!) | 正向否定预查。比如Code(?!Sheep) 不能匹配CodeSheep 中的Code ,但能匹配CodePig 中的Code 。 |
(?<=) | 反向预查。比如(?<=Code)Sheep 能匹配CodeSheep 中的Sheep ,但不能匹配ReadSheep 中的Sheep 。 |
(?<!) | 反向否定预查。比如(?<!Code)Sheep 不能匹配CodeSheep 中的Sheep ,但能匹配ReadSheep 中的Sheep 。 |
特殊标志
表达式 | 描述 |
---|
/.../i | 忽略大小写。 |
/.../g | 全局匹配。 |
/.../m | 多行修饰符。用于多行匹配。 |
常用正则表达式
数字校验
描述 | 正则表达式 | 备注 |
---|
数字 | ^[0-9]*$ | |
n位数字 | ^\d{n}$ | |
至少n位数字 | ^\d{n,}$ | |
m~n位数字 | ^\d{m,n}$ | |
整数 | ^(-?[1-9]\d*)$ | 非0开头,包括正整数和负整数 |
正整数 | ^[1-9]\d*$ | |
负整数 | ^-[1-9]\d*$ | |
非负整数 | ^(([1-9]\d*)|0)$ | |
非正整数 | ^((-[1-9]\d*)|0)$ | |
浮点数 | ^-?(?:[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0\.0+|0)$ | 包括正浮点数和负浮点数 |
正浮点数 | ^(?:[1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ | |
负浮点数 | ^-(?:[1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ | |
非正浮点数 | ^(?:-(?:[1-9]\d*\.\d+|0\.\d*[1-9]\d*)|0\.0+|0)$ | 包含0 |
非负浮点数 | ^(?:[1-9]\d*\.\d+|0\.\d+|0\.0+|0)$ | 包含0 |
仅一位小数 | ^-?(?:0|[1-9][0-9]*)\.[0-9]{1}$ | |
最少一位小数 | ^-?(?:0|[1-9][0-9]*)\.[0-9]{1,}$ | |
最多两位小数 | ^-?(?:0|[1-9][0-9]*)\.[0-9]{1,2}$ | |
连续重复的数字 | ^(\d)\1+$ | 例如:111 ,222 |
字符校验
| | |
---|
描述 | 正则表达式 | 备注 |
中文 | ^[\u4E00-\u9FA5]+$ | |
全角字符 | ^[\uFF00-\uFFFF]+$ | |
半角字符 | ^[\u0000-\u00FF]+$ | |
英文字符串(大写) | ^[A-Z]+$ | |
英文字符串(小写) | ^[a-z]+$ | |
英文字符串(不区分大小写) | ^[A-Za-z]+$ | |
中文和数字 | ^(?:[\u4E00-\u9FA5]{0,}|\d)+$ | |
英文和数字 | ^[A-Za-z0-9]+$ | |
数字、英文字母或者下划线组成的字符串 | ^\w+$ | |
中文、英文、数字包括下划线 | ^[\u4E00-\u9FA5\w]+$ | |
不含字母的字符串 | ^[^A-Za-z]*$ | |
连续重复的字符串 | ^(.)\1+$ | 例如:aa ,bb |
长度为n的字符串 | ^.{n}$ | |
ASCII | ^[ -~]$ | |
日期和时间校验
描述 | 正则表达式 | 备注 |
---|
日期 | ^\d{1,4}-(?:1[0-2]|0?[1-9])-(?:0?[1-9]|[1-2]\d|30|31)$ | 弱校验,例如:2022-06-12 |
日期 | ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$ | 严格校验,考虑平闰年 |
时间 | ^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$ | 12小时制,例如:11:21:31 |
时间 | ^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$ | 24小时制,例如:23:21:31 |
日期+时间 | ^(\d{1,4}-(?:1[0-2]|0?[1-9])-(?:0?[1-9]|[1-2]\d|30|31)) ((?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d)$ | 例如:2000-11-11 23:20:21 |
日常生活相关
描述 | 正则表达式 | 备注 |
---|
中文名 | ^[\u4E00-\u9FA5·]{2,16}$ | |
英文名 | ^[a-zA-Z][a-zA-Z\s]{0,20}[a-zA-Z]$ | |
车牌号 | ^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]$ | 不含新能源 |
车牌号 | ^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z](?:(?:[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳])|(?:(?:\d{5}[A-HJK])|(?:[A-HJK][A-HJ-NP-Z0-9][0-9]{4})))$ | 包含新能源 |
火车车次 | ^[GCDZTSPKXLY1-9]\d{1,4}$ | 例如:G1234 |
手机号 | ^(?:(?:\+|00)86)?1[3-9]\d{9}$ | 弱匹配 |
手机号 | ^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$ | 严格匹配 |
固话号码 | ^(?:(?:\d{3}-)?\d{8}|^(?:\d{4}-)?\d{7,8})(?:-\d+)?$ | |
手机IMEI码 | ^\d{15,17}$ | 一般是15位 |
邮编 | ^(?:0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$ | 例如:211100 |
统一社会信用代码 | ^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$ | |
身份证号码(1代) | ^[1-9]\d{7}(?:0\d|10|11|12)(?:0[1-9]|[1-2][\d]|30|31)\d{3}$ | 15位数字 |
身份证号码(2代) | ^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[0-9Xx]$ | 18位数字 |
QQ号 | ^[1-9][0-9]{4,}$ | 一般是5到10位 |
微信号 | ^[a-zA-Z][-_a-zA-Z0-9]{5,19}$ | 一般6~20位,字母开头,可包含字母、数字、-、_,不含特殊字符 |
股票代码 | ^(s[hz]|S[HZ])(000[\d]{3}|002[\d]{3}|300[\d]{3}|600[\d]{3}|60[\d]{4})$ | A股,例如:600519 |
银行卡卡号 | ^[1-9]{1}(?:\d{15}|\d{18})$ | 一般为19位 |
互联网相关
| | |
---|
描述 | 正则表达式 | 备注 |
域名 | ^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$ | 例如:r2coding.com |
网址 | ^(?:https?:\/\/)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$ | 例如:https://www.r2coding.com/ |
带端口号的网址(或IP) | ``^(?:https?😕/)?[\w-]+(?:.[\w-]+)+:\d{1,5}/?$` | 例如:http://127.0.0.1:8888/ |
URL | ^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()!@:%_\+.~#?&\/\/=]*)$ | 例如:https://www.r2coding.com/#/README?id=1 |
邮箱email | ^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$ | 支持中文,例如:codesheep@cs.com |
用户名 | ^[a-zA-Z0-9_-]{4,20}$ | 4到20位 |
弱密码 | ^[\w]{6,16}$ | 6~16位,包含大小写字母和数字的组合 |
强密码 | ^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@\.#$%^&*? ]).*$ | 至少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符 |
端口号 | ^(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$ | 例如:65535 |
IPv4地址 | ^(?:(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$ | 例如:192.168.31.1 |
IPv4地址+端口 | ^(?:(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$ | 例如:192.168.31.1:8080 |
IPv6地址 | ^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$ | 例如:CDCD:910A:2222:5498:8475:1111:3900:2020 |
IPv6地址+端口 | ^\[(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\](?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$ | 例如:[CDCD:910A:2222:5498:8475:1111:3900:2020]:9800 |
子网掩码 | ^(?:254|252|248|240|224|192|128)\.0\.0\.0|255\.(?:254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(?:254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(?:255|254|252|248|240|224|192|128|0)$ | 例如:255.255.255.0 |
MAC地址 | ^(?:(?:[a-f0-9A-F]{2}:){5}|(?:[a-f0-9A-F]{2}-){5})[a-f0-9A-F]{2}$ | |
Version版本号 | ^\d+(?:\.\d+){2}$ | 例如:12.1.1 |
图片后缀 | \.(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif)+ | 可按需增删扩展名集合 |
视频后缀 | \.(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)+ | 可按需增删扩展名集合 |
图片链接 | (?:https?:\/\/)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.+\.(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif) | 可按需增删扩展名集合 |
视频链接 | (?:https?:\/\/)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.+\.(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4) | 可按需增删扩展名集合 |
迅雷链接 | thunderx?:\/\/[a-zA-Z\d]+= | |
ed2k链接 | ed2k:\/\/|file|.+|\/ | |
磁力链接 | magnet:\?xt=urn:btih:[0-9a-fA-F]{40,}.* | |
其他
描述 | 正则表达式 | 备注 |
---|
MD5格式 | ^(?:[a-f\d]{32}|[A-F\d]{32})$ | 32位MD5,例如:7552E7071B118CBFFEC8C930455B4297 |
BASE64格式 | ^\s*data:(?:[a-z]+\/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!$&',()*+;=\-._~:@/?%\s]*?)\s*$ | 例如:data:image/jpeg;base64,xxxx== |
UUID | ^[a-f\d]{4}(?:[a-f\d]{4}-){4}[a-f\d]{12}$ | 例如:94f9d45a-71b0-4b3c-b69d-20c4bc9c8fdd |
16进制 | ^[A-Fa-f0-9]+$ | 例如:FFFFFF |
16进制颜色 | ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$ | 例如:#FFFFFF |
SQL语句 | ^(?:select|drop|delete|create|update|insert).*$ | |
Java包名 | ^(?:[a-zA-Z_]\w*)+(?:[.][a-zA-Z_]\w*)+$ | 例如:com.r2coding.controller |
文件扩展名 | \.(?:doc|pdf|txt) | 可按需增删扩展名集合 |
Windows文件路径 | ^[a-zA-Z]:(?:\\[\w\u4E00-\u9FA5\s]+)+[.\w\u4E00-\u9FA5\s]+$ | 例如:C:\Users\Administrator\Desktop\a.txt |
Windows文件夹路径 | ^[a-zA-Z]:(?:\\[\w\u4E00-\u9FA5\s]+)+$ | 例如:C:\Users\Administrator\Desktop |
Linux文件路径 | ^\/(?:[^/]+\/)*[^/]+$ | 例如:/root/library/a.txt |
Linux文件夹路径 | ^\/(?:[^/]+\/)*$ | 例如:/root/library/ |
姓名
^[赵,钱,孙,李,周,吴,郑,王,冯,陈,楮,卫,蒋,沈,韩,杨,朱,秦,尤,许,何,吕,施,张,孔,曹,严,华,金,魏,陶,"
+ "姜,戚,谢,邹,喻,柏,水,窦,章,云,苏,潘,葛,奚,范,彭,郎,鲁,韦,昌,马,苗,凤,花,方,俞,任,袁,柳,酆,鲍,史,唐,费,廉,岑,薛,雷,贺,倪,汤,滕,殷,罗,"
+ "毕,郝,邬,安,常,乐,于,时,傅,皮,卞,齐,康,伍,余,元,卜,顾,孟,平,黄,和,穆,萧,尹,姚,邵,湛,汪,祁,毛,禹,狄,米,贝,明,臧,计,伏,成,戴,谈,宋,茅,"
+ "庞,熊,纪,舒,屈,项,祝,董,梁,杜,阮,蓝,闽,席,季,麻,强,贾,路,娄,危,江,童,颜,郭,梅,盛,林,刁,锺,徐,丘,骆,高,夏,蔡,田,樊,胡,凌,霍,虞,万,支,"
+ "柯,昝,管,卢,莫,经,房,裘,缪,干,解,应,宗,丁,宣,贲,邓,郁,单,杭,洪,包,诸,左,石,崔,吉,钮,龚,程,嵇,邢,滑,裴,陆,荣,翁,荀,羊,於,惠,甄,麹,家,"
+ "封,芮,羿,储,靳,汲,邴,糜,松,井,段,富,巫,乌,焦,巴,弓,牧,隗,山,谷,车,侯,宓,蓬,全,郗,班,仰,秋,仲,伊,宫,宁,仇,栾,暴,甘,斜,厉,戎,祖,武,符,"
+ "刘,景,詹,束,龙,叶,幸,司,韶,郜,黎,蓟,薄,印,宿,白,怀,蒲,邰,从,鄂,索,咸,籍,赖,卓,蔺,屠,蒙,池,乔,阴,郁,胥,能,苍,双,闻,莘,党,翟,谭,贡,劳,"
+ "逄,姬,申,扶,堵,冉,宰,郦,雍,郤,璩,桑,桂,濮,牛,寿,通,边,扈,燕,冀,郏,浦,尚,农,温,别,庄,晏,柴,瞿,阎,充,慕,连,茹,习,宦,艾,鱼,容,向,古,易,"
+ "慎,戈,廖,庾,终,暨,居,衡,步,都,耿,满,弘,匡,国,文,寇,广,禄,阙,东,欧,殳,沃,利,蔚,越,夔,隆,师,巩,厍,聂,晁,勾,敖,融,冷,訾,辛,阚,那,简,饶,"
+ "空,曾,毋,沙,乜,养,鞠,须,丰,巢,关,蒯,相,查,后,荆,红,游,竺,权,逑,盖,益,桓,公,万俟,司马,上官,欧阳,夏侯,诸葛,闻人,东方,赫连,皇甫,尉迟,"
+ "公羊,澹台,公冶,宗政,濮阳,淳于,单于,太叔,申屠,公孙,仲孙,轩辕,令狐,锺离,宇文,长孙,慕容,鲜于,闾丘,司徒,司空,丌官,司寇,仉,督,子车,"
+ "颛孙,端木,巫马,公西,漆雕,乐正,壤驷,公良,拓拔,夹谷,宰父,谷梁,晋,楚,阎,法,汝,鄢,涂,钦,段干,百里,东郭,南门,呼延,归,海,羊舌,微生,岳,"
+ "帅,缑,亢,况,后,有,琴,梁丘,左丘,东门,西门,商,牟,佘,佴,伯,赏,南宫,墨,哈,谯,笪,年,爱,阳,佟,第五,言,福][\\u4e00-\\u9fa5]{1,4}$