常用的正则表达式
常用的正则表达式。正则表达式功能非常强大,不管是在脚本中(如sed、grep、awk等),还是编程语言中,能非常方便的匹配出目标值。
用一种特殊的符号,来表达一种模式,然后匹配到特定的值。注意,正则表达式,跟文件路径的匹配符号?,*是不同的,不要混淆。
简单入门,参考链接
使用方式
在编辑器等工具中,有的是支持正则表达式的。
shell中
grep -P "正则表达式" 文本.txt
egrep "正则表达式" 文本.txt
sed ??
awk
js、java、php、python中也是支持的。
所以,正则表达式的用途还是非常广的,在解决特定的字符处理方便,非常方便。像html的标签解析,也可以使用正则来搞定。
ip、手机
匹配ip地址
^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$
匹配手机号
粗略的匹配
13\d{9}
数字校验
| 描述 | 正则表达式 | 备注 |
|---|---|---|
| 数字 | ^[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 |
字符校验
| 描述 | 正则表达式 | 备注 |
|---|---|---|
| 中文 | ^[\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] |
| 日期 | `^(?:(?!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] |
日常生活相关
| 描述 | 正则表达式 | 备注 |
|---|---|---|
| 中文名 | ^[\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})$` |
互联网相关
| 描述 | 正则表达式 | 备注 |
|---|---|---|
| 域名 | ^[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} |
| 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,}.* |
其他
| 描述 | 正则表达式 | 备注 |
|---|---|---|
| MD5格式 | `^(?:[a-f\d]{32} | [A-F\d]{32})$` |
| 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})$` |
| SQL语句 | `^(?:select | drop |
| Java包名 | ^(?:[a-zA-Z_]\w*)+(?:[.][a-zA-Z_]\w*)+$ |
例如:com.r2coding.controller |
| 文件扩展名 | `.(?:doc | |
| 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/ |