抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

教程

快速入门

BV1mt4y1o7Rh

BV1da4y1p7iZ


仔细学学


基础速查

字符

表达式 描述
[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*
正浮点数 `^(?:[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+$ 例如:111222

字符校验

描述 正则表达式 备注
中文 ^[\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+$ 例如:aaabbb
长度为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挂学警港澳]$ 不含新能源
车牌号 `[1][A-HJ-NP-Z](?😦?:[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]) (?😦?:\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代) `[2]\d{7}(?:0\d 10
身份证号码(2代) `[3]\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}
银行卡卡号 `[4]{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,}.*

其他

描述 正则表达式 备注
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格式 ^\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 pdf
HTML标签 <(\w+)[^>]*>(.*?<\/\1>)? 例如:<div class="navigator"></div>
HTML注释 <!--(.*?)--> 例如:<!--注释-->

应用场景

在 python 中使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import re

# 正则表达式
pattern = r'正则表达式'

# 要搜索的文本
text = "想要搜索的文本内容。"

# 使用re.search()来查找第一个匹配的项
match = re.search(pattern, text)

if match:
print("匹配的文本:", match.group())
else:
print("没有找到匹配项。")
  1. re.search(pattern, string):在字符串中搜索模式的第一个位置,返回一个Match对象,如果没有找到匹配项,则返回None
  2. re.match(pattern, string):仅从字符串的开始位置匹配模式,如果模式匹配,则返回一个Match对象,否则返回None
  3. re.findall(pattern, string):在字符串中找到所有匹配的模式,并返回一个包含所有匹配项的列表。
  4. re.finditer(pattern, string):在字符串中找到所有匹配的模式,并返回一个迭代器,该迭代器产生Match对象。
  5. re.sub(pattern, repl, string):替换字符串中所有匹配的模式,并返回一个新的字符串。

在 mySQL 中使用

1
2
3
4
5
6
7
8
9
10
11
12
SELECT column_name
FROM table_name
WHERE column_name REGEXP 'pattern';

# 查找name字段中以'st'为开头的所有数据
SELECT name FROM person_tbl WHERE name REGEXP '^st';

# 查找name字段中以'ok'为结尾的所有数据
SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

# 查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据
SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

在其他DBMS中使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Oracle
SELECT column_name
FROM table_name
WHERE REGEXP_LIKE(column_name, 'pattern');

# SQL Server
SELECT column_name
FROM table_name
WHERE column_name LIKE 'pattern%';

# PostgreSQL
SELECT column_name
FROM table_name
WHERE column_name ~ 'pattern';
-- WHERE column_name SIMILAR TO 'pattern';

工具

可视化

在线测试&AI解析


  1. 京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 ↩︎

  2. 1-9 ↩︎

  3. 1-9 ↩︎

  4. 1-9 ↩︎

评论