正则表达式
1.基础正则表达式速查表
1.1 字符
表达式 | 描述 |
---|---|
[abc] | 字符集。匹配集合中所含的任一字符。 |
[^abc] | 否定字符集。匹配任何不在集合中的字符。 |
[a-z] | 字符范围。匹配指定范围内的任意字符。 |
. | 匹配除换行符以外的任何单个字符。 |
\ | 转义字符。 |
\w | 匹配任何字母数字,包括下划线(等价于[A-Za-z0-9_])。 |
\W | 匹配任何非字母数字(等价于[^A-Za-z0-9_])。 |
\d | 数字。匹配任何数字。 |
\D | 非数字。匹配任何非数字字符。 |
\s | 空白。匹配任何空白字符,包括空格、制表符等。 |
\S | 非空白。匹配任何非空白字符。 |
1.2 分组和引用
表达式 | 描述 |
---|---|
(expression) | 分组。匹配括号里的整个表达式。 |
(?:expression) | 非捕获分组。匹配括号里的整个字符串但不获取匹配结果,拿不到分组引用。 |
\num | 对前面所匹配分组的引用。比如(\d)\1可以匹配两个相同的数字,(Code)(Sheep)\1\2则可以匹配CodeSheepCodeSheep。 |
1.3 锚点/边界
表达式 | 描述 |
---|---|
^ | 匹配字符串或行开头。 |
$ | 匹配字符串或行结尾。 |
\b | 匹配单词边界。比如Sheep\b可以匹配CodeSheep末尾的Sheep,不能匹配CodeSheepCode中的Sheep。 |
\B | 匹配非单词边界。比如Code\B可以匹配HelloCodeSheep中的Code,不能匹配HelloCode中的Code。 |
1.4 数量表示
表达式 | 描述 |
---|---|
? | 匹配前面的表达式0个或1个。即表示可选项。 |
+ | 匹配前面的表达式至少1个。 |
* | 匹配前面的表达式0个或多个。 |
{m} | 匹配前面的表达式m个。 |
{m,} | 匹配前面的表达式最少m个。 |
{m,n} | 匹配前面的表达式最少m个,最多n个。 |
1.5 预查断言
表达式 | 描述 |
---|---|
(?=) | 正向预查。比如Code(?=Sheep)能匹配CodeSheep中的Code,但不能匹配CodePig中的Code。 |
(?!) | 正向否定预查。比如Code(?!Sheep)不能匹配CodeSheep中的Code,但能匹配CodePig中的Code。 |
(?<=) | 反向预查。比如(?<=Code)Sheep能匹配CodeSheep中的Sheep,但不能匹配ReadSheep中的Sheep。 |
(?<!) | 反向否定预查。比如(?<!Code)Sheep不能匹配CodeSheep中的Sheep,但能匹配ReadSheep中的Sheep。 |
1.6 特殊标志
表达式 | 描述 |
---|---|
/…/i | 忽略大小写。 |
/…/g | 全局匹配。 |
/…/m | 多行修饰符。用于多行匹配。 |
2.常用正则表达式示例
2.1 数字校验
描述 | 正则表达式 | 备注 |
---|---|---|
数字 | ^[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* |
正浮点数 | ^(?:[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*) |
非负浮点数 | ^(?:[1-9]\d*.\d+ | 0.\d+ |
仅一位小数 | ^-?(?: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 |
2.2 字符校验
描述 | 正则表达式 | 备注 |
---|---|---|
中文 | ^[\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+$ | 例如:aaa,bbb |
长度为n的字符串 | ^.{n}$ | |
ASCII | ^[ -~]$ |
2.3 日期和时间校验
描述 | 正则表达式 | 备注 |
---|---|---|
日期 | ^\d{1,4}-(?:1[0-2] | 0?[1-9])-(?:0?[1-9] |
日期 | ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9] | 1[0-2])-(?:0[1-9] |
时间 | ^(?:1[0-2] | 0?[1-9]):[0-5]\d:[0-5]\d$ |
时间 | ^(?:[01]\d | 2[0-3]):[0-5]\d:[0-5]\d$ |
日期+时间 | ^(\d{1,4}-(?:1[0-2] | 0?[1-9])-(?:0?[1-9] |
2.4 日常生活相关
描述 | 正则表达式 | 备注 |
---|---|---|
中文名 | ^[\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 | (?:(?:\d{5}[A-HJK]) |
火车车次 | ^[GCDZTSPKXLY1-9]\d{1,4}$ | 例如:G1234 |
手机号 | ^(?:(?:+ | 00)86)?1[3-9]\d{9}$ |
手机号 | ^(?:(?:+ | 00)86)?1(?:(?:3[\d]) |
固话号码 | ^(?:(?:\d{3}-)?\d{8} | ^(?:\d{4}-)?\d{7,8})(?:-\d+)?$ |
手机IMEI码 | ^\d{15,17}$ | 一般是15位 |
邮编 | ^(?:0[1-7] | 1[0-356] |
统一社会信用代码 | ^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$ | |
身份证号码(1代) | ^[1-9]\d{7}(?:0\d | 10 |
身份证号码(2代) | ^[1-9]\d{5}(?:18 | 19 |
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} |
银行卡卡号 | ^[1-9]{1}(?:\d{15} | \d{18})$ |
2.5 互联网相关
描述 | 正则表达式 | 备注 |
---|---|---|
域名 | ^[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@:%._+ |
例如: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} |
IPv4地址 | ^(?:(?:\d | [1-9]\d |
IPv4地址+端口 | ^(?:(?:\d | [1-9]\d |
IPv6地址 | ^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4} | ([0-9a-fA-F]{1,4}:){1,7}: |
IPv6地址+端口 | ^[(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4} | ([0-9a-fA-F]{1,4}:){1,7}: |
子网掩码 | ^(?:254 | 252 |
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 |
视频后缀 | .(swf | avi |
图片链接 | (?:https?://)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.+.(gif | png |
视频链接 | (?:https?://)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.+.(swf | avi |
迅雷链接 | thunderx?://[a-zA-Z\d]+= | |
ed2k链接 | ed2k://|file|.+|/ | |
磁力链接 | magnet:?xt=urn:btih:[0-9a-fA-F]{40,}.* |
2.6 其他
描述 | 正则表达式 | 备注 |
---|---|---|
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/ |
MD5格式 | ^(?:[a-f\d]{32} | [A-F\d]{32})$ |
BASE64格式 | ^\sdata:(?:[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})$ |
SQL语句 | ^(?:select | drop |
Java包名 | ^(?:[a-zA-Z_]\w*)+(?:[.][a-zA-Z_]\w*)+$ | 例如:com.r2coding.controller |
文件扩展名 | .(?:doc | |
HTML标签 | <(\w+)[^>]>(.?</\1>)? | 例如: |
HTML注释 | 例如: |
正则表达式
https://pudding.nousbuild.com/regular-expression/