一、前言
本文适合完全没有编程、正则基础的读者,从零系统讲解正则表达式核心语法、匹配规则。全文以“易懂、实用、可落地”为原则,结合大量办公、数据处理、文本清洗实战案例,帮助读者快速上手。
全文采用「概念讲解+语法示例+逐行拆解+实战案例+替换实操」的学习模式,学完可独立完成表单校验、文本筛选、日志解析、代码过滤、数据脱敏、格式统一等日常工作场景需求。
二、正则基础语法
2.1 什么是正则表达式?
正则表达式(简称Regex)是一套标准化的文本匹配规则,通过极简的符号组合,快速实现文本的查找、匹配、筛选、校验、批量替换,是文本处理的高效工具。
日常高频使用场景:手机号/邮箱合法性校验、网页链接提取、HTML标签过滤、日期格式统一、日志内容筛选、批量文本脱敏、内容排版规整等。
2.2 核心学习逻辑
所有正则表达式的核心逻辑只围绕两点展开,掌握即可吃透基础:
-
匹配什么字符:包含普通字面量、自定义字符集、通用转义字符
-
匹配多少个字符:包含量词、位置锚点、分组规则
2.3 字面字符(基础精准匹配)
直接书写字母、数字、汉字等普通字符,即可精准匹配文本中对应的内容,匹配过程区分大小写。
示例表达式
hello
匹配含义:匹配文本中完整的「hello」字符串
可匹配内容:hello world、test hello、abchello
不匹配内容:Hello(大小写不符)、hell(字符缺失)、helloo(字符多余)
实战替换案例
需求:批量将全文中所有小写「hello」替换为「Hi」
替换正则:hello,替换内容:Hi
替换效果:hello world → Hi world
2.4 转义字符 \(特殊符号匹配必备)
正则中 . * + ? ( ) [ ] { } \ ^ $ 均为功能特殊符号,拥有专属匹配规则,无法直接匹配符号本身。若需要匹配这些特殊字符,必须在字符前加反斜杠 \ 进行转义。
| 转义表达式 | 匹配内容 |
|---|---|
\. | 匹配小数点 . |
\+ | 匹配加号 + |
\? | 匹配问号 ? |
\* | 匹配星号 * |
实战替换案例
需求:批量将文本中的小数点替换为横杠,统一日期、数值格式
替换正则:\.,替换内容:-
替换效果:2025.07.30、3.1415 → 2025-07-30、3-1415
2.5 通用简写字符集
正则提供四类高频通用简写符号,可快速匹配通用字符,无需手动书写区间,是日常使用频率最高的基础语法。
\d # 匹配任意单个数字(0-9)
\w # 匹配任意单个字母、数字、下划线
\s # 匹配任意单个空白符(空格、换行、制表符)
. # 匹配任意单个字符(换行符除外)
实战替换案例
-
清空全文数字:正则
\d,替换内容为空,可批量剔除文本中所有数字 -
规整文本空白:正则
\s+,替换为单个空格,统一全文多空格、换行、制表符混乱问题
2.6 自定义字符集 []
中括号 [] 表示匹配括号内任意单个字符,单次仅匹配一个内容,支持自定义字符匹配区间。
[0-9] # 匹配0-9任意数字(等价于 \d)
[a-z] # 匹配任意小写英文字母
[A-Z] # 匹配任意大写英文字母
[0-9a-zA-Z]# 匹配数字、大小写字母所有组合
实战替换案例
需求:剔除文本中所有英文字母,仅保留汉字、数字和标点符号
替换正则:[a-zA-Z],替换内容为空
替换效果:测试test内容123 → 测试内容123
2.7 量词(控制字符匹配次数)
量词用于修饰紧邻自身前方的单个字符或字符集,精准控制字符的匹配出现次数,是实现批量匹配的核心语法。
* # 匹配0次或多次(字符可有可无,无次数上限)
+ # 匹配1次或多次(字符至少出现1次)
? # 匹配0次或1次(字符最多出现1次)
{n} # 精准匹配 n 次(固定次数)
{n,m}# 匹配 n~m 次(包含首尾次数区间)
{n,} # 匹配至少 n 次(无上限)
2.8 锚点 ^ $(精准整段匹配)
锚点不匹配任何文本字符,仅匹配文本位置,用于限制内容的开头和结尾,杜绝模糊匹配,是表单精准校验的必备语法。
^ # 匹配文本/行的开头位置
$ # 匹配文本/行的结尾位置
示例说明:^\d{11}$ 表示整段内容必须是11位纯数字,无任何多余字符、无缺失字符,严格匹配11位数字格式。
2.9 分组 ()
小括号 () 用于内容打包分组,核心作用:限定语法作用域、单独提取指定内容、支持分组回调替换,是数据脱敏、精准替换、局部内容提取的核心语法。量词可对整个分组内容生效。
(ab)+ # 匹配ab、abab、ababab等连续重复的整体内容
分组支持 $1、$2、$3 回调取值,可单独保留指定分组内容,替换其余内容。
2.10 贪婪与非贪婪模式
正则量词默认开启贪婪模式,会尽可能匹配最长的符合条件内容;在量词后添加 ? 即可切换为非贪婪模式,尽可能匹配最短内容,避免多内容串连匹配错误。
2.10 贪婪与非贪婪模式
正则量词默认开启贪婪模式,会尽可能匹配最长的符合条件内容;在量词后添加 ? 即可切换为非贪婪模式,尽可能匹配最短内容,避免多内容串连匹配错误,这是新手最容易出现批量匹配错乱的核心原因。
.* # 贪婪模式:匹配所有字符,直至文本最后结尾
.*? # 非贪婪模式:匹配最短符合条件内容(常用于HTML标签截取、短文本提取)
正反案例对比(快速理解核心差异)
测试文本:<div>标题</div><div>内容</div>
-
**
<.*>****贪婪匹配 **:一次性匹配整段全部内容,直接匹配到文本末尾,造成匹配溢出错误 -
**
<.*?>****非贪婪匹配 **:单独匹配每一个div标签,精准拆分内容,符合预期需求
2.11 正则分支逻辑(或运算 |)
**|****分支符 ** 是正则核心语法之一,含义为「匹配左边内容 或 右边内容」,适用于多关键词、多格式、多前缀的兼容匹配场景,优先级最低,仅作用于左右相邻的整体表达式。
基础语法示例
http|https # 匹配 http 或 https
baidu|taobao # 匹配 baidu 或 taobao
语法优化技巧:分支匹配多相同前缀时,可用分组收拢公共部分,精简正则长度、提升匹配效率
优化前:http|https 优化后:https?
实战场景:兼容匹配两种日期分隔格式
\d{4}-\d{2}-\d{2}|\d{4}/\d{2}/\d{2}
可同时匹配 2025-08-04、2025/08/04 两种合规日期格式。
2.12 正则修饰符(全局匹配核心)
修饰符不参与字符匹配,用于修改正则整体匹配规则,是解决「匹配不全、大小写匹配失败、换行匹配失效」的关键,所有编辑器、代码工具均默认需要配置修饰符。
通用高频修饰符(全平台通用)
-
g(global 全局匹配):默认只匹配第一个结果,开启后匹配全文所有符合条件内容,批量替换、批量筛选必须开启
-
i(ignoreCase 忽略大小写):匹配过程不区分大小写,适配英文账号、关键词过滤场景
-
m(multiline 多行模式):修改
^ $锚点规则,开启后锚点匹配每一行的首尾,默认仅匹配整个文本的首尾 -
s(singleline 单行模式):让
.通配符匹配换行符,支持跨行文本、跨行标签匹配
新手必记规则:批量替换必开g、英文匹配可开i、行首尾校验必开m、跨行匹配必开s。
2.13 捕获组与非捕获组
前文讲解的 () 默认是捕获组,会占用分组序号 $1 $2、缓存匹配内容;日常复杂正则中,仅用于分组限定范围、不需要取值的场景,推荐使用非捕获组,节省性能、不占用分组序号。
# 捕获组 ():缓存内容、支持回调取值
(https|http)
# 非捕获组 (?:):仅分组、不缓存、不占用序号
(?:https|http)
实战适用场景:多分支匹配、量词作用域限定、复杂正则分层,无需提取分组内容时,统一使用非捕获组,避免分组序号混乱。
2.14 环视语法(精准截取核心)
环视是正则高级核心语法,特点:只做条件判断,不占用匹配字符、不消耗文本,可实现「匹配指定前缀/后缀的内容、截取中间文本、精准过滤」等高阶场景。
2.14.1 正向预查 (?=):匹配后面等于指定内容的文本
示例:匹配后面带@符号的用户名前缀
\w+(?=@)
测试文本:test@163.com,匹配结果:test(仅匹配@前方内容,不包含@)
2.14.2 负向预查 (?!):匹配后面不等于指定内容的文本
前文已提及,用于拦截指定后缀,过滤非法内容。
2.14.3 正向后瞻 (?<=):匹配前面等于指定内容的文本
示例:截取https://后方的域名内容
(?<=https:\/\/).+
测试文本:https://www\.baidu\.com,匹配结果:www\.baidu\.com
2.14.4 负向后瞻 (?<!):匹配前面不等于指定内容的文本
示例:匹配前方不是http的数字内容,精准过滤指定前缀数据。
2.15 字符集取反 [^] 实战精讲
字符集取反 [^内容] 表示匹配所有不属于括号内的字符,是文本清洗、非法字符过滤的核心语法,搭配全局修饰符使用效果最佳。
高频实战案例
-
只保留汉字,剔除所有其他内容:正则
[^\u4e00-\u9fa5],替换为空 -
只保留数字和汉字:正则
[^\u4e00-\u9fa50-9],替换为空 -
剔除所有标点符号、特殊符号:正则
[^a-zA-Z0-9\u4e00-\u9fa5],替换为空
三、实战场景(校验+反向匹配+替换实操)
本章所有案例均适配办公、数据清洗、日志处理、后端校验、数据脱敏等真实业务场景,包含完整正则表达式、匹配示例、逐段语法拆解、反向过滤规则和可直接复用的替换方案。
3.1 匹配中国大陆11位手机号
匹配规则:固定11位数字,以数字1开头,第二位为3-9(国内合法运营商号段),无多余字符。
校验正则
^1[3-9]\d{9}$
有效匹配示例:13800138000、19912345678
语法逐段拆解
-
^1:限定文本以数字1开头,符合手机号固定前缀规则 -
[3-9]:第二位数字限定为3-9,过滤非法号段 -
\d{9}:后续固定匹配9位任意数字 -
$:限定文本直接结束,严格保证整体11位数字
反向匹配(过滤非法手机号)
^(?!1[3-9]\d{9}$).*
用于表单拦截、数据清洗,可匹配所有非合规手机号文本。
实战脱敏替换(完整隐藏中间8位)
替换正则:(\d{3})\d{8},替换内容:$1********
替换效果:13800138000 → 138********
3.2 匹配邮箱地址
匹配规则:格式为「用户名@域名.后缀」,用户名、域名支持字母、数字、下划线、点、短横线,后缀至少2位字符。
校验正则
^\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,}$
有效匹配示例:test@163.com、admin-01@qq.com、user.name@baidu.cn
语法逐段拆解
-
^\w+:开头匹配至少1位字母、数字或下划线,作为用户名主体 -
([.-]\w+)*:允许用户名中间无限次出现点、短横线+合法字符 -
@:精准匹配邮箱固定分隔符号 -
\w+([.-]\w+)*:匹配多级域名、带短横线的合法域名 -
\.\w{2,}:匹配后缀,保证.com、.cn、.org等合规后缀格式 -
$:文本结束,无多余非法字符
反向匹配(过滤非法邮箱)
^(?!\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,}$).*
实战脱敏替换(隐藏用户名中间内容)
替换正则:(\w{2})\w+(@\w+\.\w+),替换内容:$1***$2
替换效果:test@163.com → te***@163.com
3.3 匹配HTTP/HTTPS URL链接
匹配规则:匹配以http或https开头的完整网页、IP链接。
校验正则
^https?:\/\/.+$
有效匹配示例:https://www\.baidu\.com、http://192\.168\.1\.1
语法逐段拆解
-
https?:匹配http或https,? 代表s字符可有可无 -
:\/\:转义匹配链接固定符号 :// -
.+:匹配后续所有任意字符(至少1位,保证链接完整) -
$:匹配完整链接,无多余后缀字符
反向匹配(过滤URL链接)
^(?!https?:\/\/.+$).*
实战替换(批量清除全文链接)
替换正则:https?:\/\/\S+,替换内容为空
替换效果:详情查看https://www\.baidu\.com → 详情查看
3.4 匹配标准日期格式
匹配规则:支持横杠、斜杠两种分隔符,4位年份、2位月份、2位日期,适配日常通用日期格式。
校验正则
^\d{4}[-/]\d{2}[-/]\d{2}$
有效匹配示例:2024-01-15、2025/12/30
语法逐段拆解
-
^\d{4}:开头匹配4位数字年份 -
[-/]:匹配横杠或斜杠分隔符 -
\d{2}:匹配2位数字月份 -
[-/]:二次匹配分隔符 -
\d{2}$:结尾匹配2位数字日期,结束文本
反向匹配(过滤非法日期)
^(?!\d{4}[-/]\d{2}[-/]\d{2}$).*
补充说明:该正则仅校验日期格式合规性,不校验大小月、2月天数等逻辑,满足日常办公格式校验需求。
实战替换(统一日期分隔符)
需求:将斜杠日期统一转为横杠格式
替换正则:(\d{4})/(\d{2})/(\d{2}),替换内容:$1-$2-$3
替换效果:2025/07/30 → 2025-07-30
3.5 匹配中文字符
匹配规则:通过Unicode编码区间,精准匹配所有简体、繁体常规中文字符。
单中文匹配正则
[\u4e00-\u9fa5]
纯中文整段匹配正则
^[\u4e00-\u9fa5]+$
语法拆解:\u4e00-\u9fa5 是所有常规中文的Unicode编码区间,搭配+可匹配连续中文字符。
反向匹配规则
-
匹配所有非中文字符:
[^\u4e00-\u9fa5] -
匹配整段无中文文本:
^[^\u4e00-\u9fa5]+$
实战替换(批量剔除所有中文)
替换正则:[\u4e00-\u9fa5],替换内容为空
替换效果:测试内容123abc!! → 123abc!!
3.6 匹配任意HTML标签
匹配规则:匹配 <> 包裹的所有HTML标签,用于网页文本提纯、代码标签过滤,采用非贪婪模式避免匹配错误。
匹配正则
<.*?>
有效匹配示例:<div>、<p class="text">、<span id="123">
语法拆解
-
<、>:匹配标签首尾尖括号 -
.*?:非贪婪匹配标签内所有内容,避免多个标签被一次性匹配
核心注意点:必须使用非贪婪 .*?,若使用贪婪 .*,会将连续多个标签合并匹配,导致清洗出错。
实战替换(网页提纯清除标签)
替换正则:<.*?>,替换内容为空
替换效果:<p>正则测试内容</p> → 正则测试内容
3.7 匹配中国大陆18位身份证号
匹配规则:固定18位字符,前17位为数字,最后一位可为数字或大写X,无多余字符。
校验正则
^\d{17}[\dX]$
有效匹配示例:110101199003071234、31010120001231123X
语法拆解
-
^\d{17}:开头匹配连续17位数字 -
[\dX]:最后一位兼容数字和大写X -
$:严格限制18位长度,杜绝多余字符
反向匹配
^(?!\d{17}[\dX]$).*
实战脱敏替换(保留前6后4位)
替换正则:(\d{6})\d{8}([\dX]{4}),替换内容:$1********$2
替换效果:110101199003071234 → 110101********1234
3.8 匹配合法整数
匹配规则:支持正整数、负整数、0,禁止0开头的非法整数(如012、005),无小数、无多余字符。
校验正则
^-?(0|[1-9]\d*)$
有效匹配:0、123、-456
无效匹配:012、3.14、-015
语法拆解
-
-?:负号可选,适配正负整数 -
0:单独匹配数字0 -
[1-9]\d*:非0开头数字,杜绝前置0的非法格式
反向匹配
^(?!-?(0|[1-9]\d*)$).*
实战替换(去除数字负号)
替换正则:-(?=\d+),替换内容为空
替换效果:-123、-456 → 123、456
3.9 匹配合法小数
匹配规则:支持正负小数,包含合法整数部分,小数点后至少1位数字,无多余字符。
校验正则
^-?(0|[1-9]\d*)\.\d+$
有效匹配:3.14、-0.5、100.999
语法拆解
-
-?:可选负号,适配正负小数 -
(0|[1-9]\d*):匹配合法整数部分 -
\.:转义匹配小数点 -
\d+:小数点后至少1位数字,杜绝无效小数
反向匹配
^(?!-?(0|[1-9]\d*)\.\d+$).*
实战替换(保留两位小数)
替换正则:(\.\d{2})\d+,替换内容:$1
替换效果:3.1415、100.999 → 3.14、100.99
3.10 匹配纯字母账号
匹配规则:仅支持大小写英文字母,长度限制4-16位,适用于简单账号、昵称校验。
校验正则
^[a-zA-Z]{4,16}$
有效匹配:admin、UserName、testAbc
语法拆解:[a-zA-Z] 匹配所有大小写字母,{4,16} 限制字符长度区间。
反向匹配
^(?![a-zA-Z]{4,16}$).*
实战替换(字母统一小写)
匹配正则:[A-Z],批量替换为小写,效果:UserName → username
3.11 匹配字母数字下划线账号
匹配规则:支持字母、数字、下划线,长度3-20位,是互联网最通用的用户名规则。
校验正则
^\w{3,20}$
有效匹配:user_01、admin123、test_name
语法拆解:\w 适配字母、数字、下划线,{3,20} 限制合法长度。
反向匹配
^(?!\w{3,20}$).*
实战替换(清理账号非法字符)
替换正则:[^\w],替换内容为空,过滤空格、标点等非法符号
替换效果:user@01!name → user01name
3.12 匹配纯空白字符
匹配规则:匹配仅包含空格、换行、制表符的空白行/空白文本,用于文档排版规整。
匹配正则
^\s*$
匹配内容:空行、全空格文本、全制表符文本
实战替换(批量清空空行)
替换正则:^\s*$\n,替换内容为空,一键清理全文空白行
3.13 匹配中国大陆邮政编码
匹配规则:国内邮政编码固定6位纯数字。
校验正则
^\d{6}$
有效匹配:510000、100000
反向匹配
^(?!\d{6}$).*
3.14 匹配内网IP地址
匹配规则:匹配四段式标准IP格式,每段1-3位数字,通过小数点分隔。
校验正则
^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
有效匹配:192.168.1.1、127.0.0.1
语法拆解:\d{1,3} 匹配单段IP数字,\. 转义匹配分隔小数点。
反向匹配
^(?!\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$).*
实战替换(IP脱敏隐藏后两段)
替换正则:(\d{1,3}\.\d{1,3})\.\d{1,3}\.\d{1,3},替换内容:$1.*.*
替换效果:192.168.1.1 → 192.168.*.*
3.15 匹配端口号
匹配规则:合法端口范围0-65535,精准匹配合规端口数值。
校验正则
^(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|[1-5]\d{4}|\d{1,4})$
有效匹配:80、443、65535、3306
反向匹配
^(?!(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|[1-5]\d{4}|\d{1,4})$).*
实战用法:结合反向正则匹配非法端口,批量过滤、清理文本中的无效端口号。
3.16 手机号中间四位脱敏
需求:保留手机号前3位、后4位,隐藏中间4位数字,兼顾隐私与辨识度。
脱敏正则
(\d{3})\d{4}(\d{4})
替换规则:$1****$2
语法拆解
-
(\d{3}):分组保留前3位运营商号段 -
\d{4}:匹配中间4位待脱敏数字 -
(\d{4}):分组保留最后4位尾号 -
$1 $2:回调分组内容,替换中间隐私部分
脱敏效果:13800138000 → 138****8000
3.17 去除文本首尾空格(高频办公)
需求场景:清洗用户输入文本、批量规整文档内容,去除段落首尾多余空格、空白符,保留文本中间正常空格。
匹配正则
^\s+|\s+$
替换内容:空
效果示例: 正则零基础学习 → 正则零基础学习
语法拆解:利用分支逻辑,^\s+ 匹配开头空白,\s+$ 匹配结尾空白,全局替换即可完成首尾去空。
3.18 匹配微信号、QQ号
微信号匹配规则:以字母开头,支持字母、数字、下划线、短横线,长度6-20位
^[a-zA-Z][a-zA-Z0-9_-]{5,19}$
QQ号匹配规则:纯数字,长度5-13位
^\d{5,13}$
3.19 密码强度校验(常用表单场景)
中级密码规则:必须包含大小写字母+数字,长度8-16位
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,16}$
高级密码规则:必须包含大小写、数字、特殊符号,长度8-16位
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[a-zA-Z\d!@#$%^&*]{8,16}$
语法说明:通过正向预查实现「必须包含指定字符」的强校验逻辑,是表单密码校验行业通用写法。
3.20 代码注释批量清除
需求场景:清洗代码文本、去除冗余注释,保留有效代码内容
清除单行//注释:正则 //.*,替换为空
清除多行/* */注释:正则 /\*.*?\*/,替换为空(需开启单行模式s)
本章所有案例均适配办公、数据清洗、日志处理、后端校验、数据脱敏等真实业务场景,包含完整正则表达式、匹配示例、逐段语法拆解、反向过滤规则和可直接复用的替换方案。
3.1 匹配中国大陆11位手机号
匹配规则:固定11位数字,以数字1开头,第二位为3-9(国内合法运营商号段),无多余字符。
校验正则
^1[3-9]\d{9}$
有效匹配示例:13800138000、19912345678
语法逐段拆解
-
^1:限定文本以数字1开头,符合手机号固定前缀规则 -
[3-9]:第二位数字限定为3-9,过滤非法号段 -
\d{9}:后续固定匹配9位任意数字 -
$:限定文本直接结束,严格保证整体11位数字
反向匹配(过滤非法手机号)
^(?!1[3-9]\d{9}$).*
用于表单拦截、数据清洗,可匹配所有非合规手机号文本。
实战脱敏替换(完整隐藏中间8位)
替换正则:(\d{3})\d{8},替换内容:$1********
替换效果:13800138000 → 138********
3.2 匹配邮箱地址
匹配规则:格式为「用户名@域名.后缀」,用户名、域名支持字母、数字、下划线、点、短横线,后缀至少2位字符。
校验正则
^\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,}$
有效匹配示例:test@163.com、admin-01@qq.com、user.name@baidu.cn
语法逐段拆解
-
^\w+:开头匹配至少1位字母、数字或下划线,作为用户名主体 -
([.-]\w+)*:允许用户名中间无限次出现点、短横线+合法字符 -
@:精准匹配邮箱固定分隔符号 -
\w+([.-]\w+)*:匹配多级域名、带短横线的合法域名 -
\.\w{2,}:匹配后缀,保证.com、.cn、.org等合规后缀格式 -
$:文本结束,无多余非法字符
反向匹配(过滤非法邮箱)
^(?!\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,}$).*
实战脱敏替换(隐藏用户名中间内容)
替换正则:(\w{2})\w+(@\w+\.\w+),替换内容:$1***$2
替换效果:test@163.com → te***@163.com
3.3 匹配HTTP/HTTPS URL链接
匹配规则:匹配以http或https开头的完整网页、IP链接。
校验正则
^https?:\/\/.+$
有效匹配示例:https://www\.baidu\.com、http://192\.168\.1\.1
语法逐段拆解
-
https?:匹配http或https,? 代表s字符可有可无 -
:\/\:转义匹配链接固定符号 :// -
.+:匹配后续所有任意字符(至少1位,保证链接完整) -
$:匹配完整链接,无多余后缀字符
反向匹配(过滤URL链接)
^(?!https?:\/\/.+$).*
实战替换(批量清除全文链接)
替换正则:https?:\/\/\S+,替换内容为空
替换效果:详情查看https://www\.baidu\.com → 详情查看
3.4 匹配标准日期格式
匹配规则:支持横杠、斜杠两种分隔符,4位年份、2位月份、2位日期,适配日常通用日期格式。
校验正则
^\d{4}[-/]\d{2}[-/]\d{2}$
有效匹配示例:2024-01-15、2025/12/30
语法逐段拆解
-
^\d{4}:开头匹配4位数字年份 -
[-/]:匹配横杠或斜杠分隔符 -
\d{2}:匹配2位数字月份 -
[-/]:二次匹配分隔符 -
\d{2}$:结尾匹配2位数字日期,结束文本
反向匹配(过滤非法日期)
^(?!\d{4}[-/]\d{2}[-/]\d{2}$).*
补充说明:该正则仅校验日期格式合规性,不校验大小月、2月天数等逻辑,满足日常办公格式校验需求。
实战替换(统一日期分隔符)
需求:将斜杠日期统一转为横杠格式
替换正则:(\d{4})/(\d{2})/(\d{2}),替换内容:$1-$2-$3
替换效果:2025/07/30 → 2025-07-30
3.5 匹配中文字符
匹配规则:通过Unicode编码区间,精准匹配所有简体、繁体常规中文字符。
单中文匹配正则
[\u4e00-\u9fa5]
纯中文整段匹配正则
^[\u4e00-\u9fa5]+$
语法拆解:\u4e00-\u9fa5 是所有常规中文的Unicode编码区间,搭配+可匹配连续中文字符。
反向匹配规则
-
匹配所有非中文字符:
[^\u4e00-\u9fa5] -
匹配整段无中文文本:
^[^\u4e00-\u9fa5]+$
实战替换(批量剔除所有中文)
替换正则:[\u4e00-\u9fa5],替换内容为空
替换效果:测试内容123abc!! → 123abc!!
3.6 匹配任意HTML标签
匹配规则:匹配 <> 包裹的所有HTML标签,用于网页文本提纯、代码标签过滤,采用非贪婪模式避免匹配错误。
匹配正则
<.*?>
有效匹配示例:<div>、<p class="text">、<span id="123">
语法拆解
-
<、>:匹配标签首尾尖括号 -
.*?:非贪婪匹配标签内所有内容,避免多个标签被一次性匹配
核心注意点:必须使用非贪婪 .*?,若使用贪婪 .*,会将连续多个标签合并匹配,导致清洗出错。
实战替换(网页提纯清除标签)
替换正则:<.*?>,替换内容为空
替换效果:<p>正则测试内容</p> → 正则测试内容
3.7 匹配中国大陆18位身份证号
匹配规则:固定18位字符,前17位为数字,最后一位可为数字或大写X,无多余字符。
校验正则
^\d{17}[\dX]$
有效匹配示例:110101199003071234、31010120001231123X
语法拆解
-
^\d{17}:开头匹配连续17位数字 -
[\dX]:最后一位兼容数字和大写X -
$:严格限制18位长度,杜绝多余字符
反向匹配
^(?!\d{17}[\dX]$).*
实战脱敏替换(保留前6后4位)
替换正则:(\d{6})\d{8}([\dX]{4}),替换内容:$1********$2
替换效果:110101199003071234 → 110101********1234
3.8 匹配合法整数
匹配规则:支持正整数、负整数、0,禁止0开头的非法整数(如012、005),无小数、无多余字符。
校验正则
^-?(0|[1-9]\d*)$
有效匹配:0、123、-456
无效匹配:012、3.14、-015
语法拆解
-
-?:负号可选,适配正负整数 -
0:单独匹配数字0 -
[1-9]\d*:非0开头数字,杜绝前置0的非法格式
反向匹配
^(?!-?(0|[1-9]\d*)$).*
实战替换(去除数字负号)
替换正则:-(?=\d+),替换内容为空
替换效果:-123、-456 → 123、456
3.9 匹配合法小数
匹配规则:支持正负小数,包含合法整数部分,小数点后至少1位数字,无多余字符。
校验正则
^-?(0|[1-9]\d*)\.\d+$
有效匹配:3.14、-0.5、100.999
语法拆解
-
-?:可选负号,适配正负小数 -
(0|[1-9]\d*):匹配合法整数部分 -
\.:转义匹配小数点 -
\d+:小数点后至少1位数字,杜绝无效小数
反向匹配
^(?!-?(0|[1-9]\d*)\.\d+$).*
实战替换(保留两位小数)
替换正则:(\.\d{2})\d+,替换内容:$1
替换效果:3.1415、100.999 → 3.14、100.99
3.10 匹配纯字母账号
匹配规则:仅支持大小写英文字母,长度限制4-16位,适用于简单账号、昵称校验。
校验正则
^[a-zA-Z]{4,16}$
有效匹配:admin、UserName、testAbc
语法拆解:[a-zA-Z] 匹配所有大小写字母,{4,16} 限制字符长度区间。
反向匹配
^(?![a-zA-Z]{4,16}$).*
实战替换(字母统一小写)
匹配正则:[A-Z],批量替换为小写,效果:UserName → username
3.11 匹配字母数字下划线账号
匹配规则:支持字母、数字、下划线,长度3-20位,是互联网最通用的用户名规则。
校验正则
^\w{3,20}$
有效匹配:user_01、admin123、test_name
语法拆解:\w 适配字母、数字、下划线,{3,20} 限制合法长度。
反向匹配
^(?!\w{3,20}$).*
实战替换(清理账号非法字符)
替换正则:[^\w],替换内容为空,过滤空格、标点等非法符号
替换效果:user@01!name → user01name
3.12 匹配纯空白字符
匹配规则:匹配仅包含空格、换行、制表符的空白行/空白文本,用于文档排版规整。
匹配正则
^\s*$
匹配内容:空行、全空格文本、全制表符文本
实战替换(批量清空空行)
替换正则:^\s*$\n,替换内容为空,一键清理全文空白行
3.13 匹配中国大陆邮政编码
匹配规则:国内邮政编码固定6位纯数字。
校验正则
^\d{6}$
有效匹配:510000、100000
反向匹配
^(?!\d{6}$).*
3.14 匹配内网IP地址
匹配规则:匹配四段式标准IP格式,每段1-3位数字,通过小数点分隔。
校验正则
^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
有效匹配:192.168.1.1、127.0.0.1
语法拆解:\d{1,3} 匹配单段IP数字,\. 转义匹配分隔小数点。
反向匹配
^(?!\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$).*
实战替换(IP脱敏隐藏后两段)
替换正则:(\d{1,3}\.\d{1,3})\.\d{1,3}\.\d{1,3},替换内容:$1.*.*
替换效果:192.168.1.1 → 192.168.*.*
3.15 匹配端口号
匹配规则:合法端口范围0-65535,精准匹配合规端口数值。
校验正则
^(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|[1-5]\d{4}|\d{1,4})$
有效匹配:80、443、65535、3306
反向匹配
^(?!(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|[1-5]\d{4}|\d{1,4})$).*
实战用法:结合反向正则匹配非法端口,批量过滤、清理文本中的无效端口号。
3.16 手机号中间四位脱敏
需求:保留手机号前3位、后4位,隐藏中间4位数字,兼顾隐私与辨识度。
脱敏正则
(\d{3})\d{4}(\d{4})
替换规则:$1****$2
语法拆解
-
(\d{3}):分组保留前3位运营商号段 -
\d{4}:匹配中间4位待脱敏数字 -
(\d{4}):分组保留最后4位尾号 -
$1 $2:回调分组内容,替换中间隐私部分
脱敏效果:13800138000 → 138****8000
四、语法速记总结表
汇总高频核心语法符号,方便快速查阅记忆:
| 语法符号 | 核心作用 |
|---|---|
\d | 匹配任意单个数字 |
\w | 匹配字母、数字、下划线 |
[] | 自定义字符集,匹配区间内任意单个字符 |
* | 匹配0次或多次,无上限 |
+ | 匹配1次或多次,至少1次 |
? | 匹配0次或1次;量词后使用切换非贪婪模式 |
^ $ | 首尾锚点,实现精准整段匹配 |
() | 分组打包、提取内容、回调替换 |
(?!) | 负向预查,反向拦截合规内容 |
[^] | 字符集取反,匹配区间外所有字符 |
十一、常用替换正则速查表(全量可直接复用)
本章汇总办公、数据处理、日志清洗、内容审核、隐私脱敏全场景高频正则,所有语句无需修改、可直接复制使用,适配编辑器、代码、在线工具全平台。
| 使用场景 | 替换正则 | 替换内容 | 替换效果示例 | 适配说明 | |
|---|---|---|---|---|---|
| 清除所有数字 | \d | 空 | 测试123内容456→测试内容 | 全平台通用,需开全局g | |
| 清除所有英文字母 | [a-zA-Z] | 空 | abc测试123xyz→测试123 | 全覆盖大小写,无兼容问题 | |
| 规整多余空白 | \s+ | 单个空格 | 正则 零基础 学习→正则 零基础 学习 | 统一空格/换行/制表符 | |
| 批量删除空行 | ^\s*$\n | 空 | 清空全文空白换行,排版整洁 | 需开启多行m模式 | |
| 小数点替换为横杠 | \. | - | 2025.07.30→2025-07-30 | 标准转义语法,全平台通用 | |
| 日期斜杠转横杠 | (\d{4})/(\d{2})/(\d{2}) | $1-$2-$3 | 2025/07/30→2025-07-30 | 代码端替换为\1取值 | |
| 清除HTTP/HTTPS链接 | https?:\/\/\S+ | 空 | 详情https://baidu\.com→详情 | 适配所有网页链接 | |
| 清除HTML标签 | <.*?> | 空 | <p>正则测试</p>→正则测试 | 非贪婪模式,防止误删 | |
| 手机号中间四位脱敏 | (\d{3})\d{4}(\d{4}) | $1****$2 | 13800138000→138****8000 | 通用隐私脱敏方案 | |
| 手机号完整脱敏 | (\d{3})\d{8} | $1******** | 13800138000→138******** | 高强度隐私保护 | |
| 邮箱用户名脱敏 | (\w{2})\w+(@\w+\.\w+) | $1***$2 | test@163.com→te***@163.com | 批量脱敏专用 | |
| 身份证脱敏 | (\d{6})\d{8}([\dX]{4}) | $1********$2 | 110101199003071234→110101********1234 | 兼容身份证末尾X | |
| IP地址脱敏 | (\d{1,3}\.\d{1,3})\.\d{1,3}\.\d{1,3} | $1.*.* | 192.168.1.1→192.168.*.* | 运维日志处理专用 | |
| 文本首尾去空格 | `^\s+ | \s+$` | 空 | 测试文本 → 测试文本 | 办公文本清洗刚需 |
| 清除代码单行注释 | //.* | 空 | let a=1//定义变量→let a=1 | 代码文本提纯专用 | |
| 去除连续重复内容 | (.+?)\1+ | $1 | 天天天天学习→天天学习 | 文本规整、去重专用 |
总结新手最易出错的正则使用问题,规避90%以上匹配、替换错误:
四、新手高频踩坑总结与避坑指南
汇总正则匹配、替换、校验场景下90%以上的新手错误,统一规范使用逻辑,彻底规避匹配错乱、替换失效、格式报错等问题,是日常实操的核心准则。
-
精准校验必加锚点:表单校验、完整数据格式判断,必须搭配
^ $首尾锚点实现精准匹配;批量全局替换可省略锚点,避免出现匹配不全、局部替换失效问题。 -
特殊符号必转义:
. / + ? * () [ ] { } \等正则功能符号,若需要匹配符号本身,必须添加\转义,是替换场景最高频出错点。 -
标签与多片段匹配用非贪婪:HTML标签截取、多段相似文本提取、短文本拆分场景,统一使用
.*?非贪婪模式,杜绝贪婪模式导致的匹配溢出、批量串连错乱问题。 -
量词作用域精准限定:所有量词仅修饰紧邻前方的单个字符或分组,批量匹配多字符内容时,必须用
()分组包裹目标内容,避免作用域偏差。 -
反向匹配优选负向预查:数据清洗、非法内容拦截、合规内容过滤场景,优先使用
(?!)负向预查,相比传统取反匹配精度更高、适配场景更广。 -
替换核心固定逻辑:复杂替换、数据脱敏、格式规整统一遵循「分组匹配关键内容 + 2回调保留有效内容 + 清空无关内容」的逻辑,高效不报错。
-
批量操作必开全局g:正则默认仅匹配第一个符合内容,所有批量替换、批量筛选场景,必须开启g全局修饰符,否则仅修改首个匹配项。
-
分支或运算必加分组:
|或运算优先级为正则最低,多条件、多格式兼容匹配时,必须用()限定作用域,防止匹配范围错乱。 -
按需搭配多行/单行修饰符:逐行首尾校验开启m多行模式,跨行文本、跨行标签匹配开启s单行模式,根据场景适配避免匹配失效。
-
区分平台取值与转义规则:编辑器(VS Code/Notepad++)用
$1回调、单层转义;Python/JS代码用\\1回调、双层转义,严禁混用导致报错。
五、正则高阶语法完整版
补齐基础章节缺失的高阶核心知识点,涵盖贪婪非贪婪模式、分支逻辑、修饰符、分组、环视、字符集取反,零基础可直接理解,适配复杂业务场景。
5.1 贪婪与非贪婪模式(核心避坑)
正则所有量词(* + ? {n,m})默认均为贪婪模式,核心特性:尽可能匹配最长符合条件的文本;在任意量词末尾添加 ?,即可强制转为非贪婪模式,尽可能匹配最短符合条件文本,是解决跨行匹配、多内容误匹配的核心关键。
核心语法对照
# 贪婪模式(默认)
.* # 匹配从第一个符合字符到文本最后的所有内容
.+ # 最长匹配1次及以上字符
# 非贪婪模式(手动开启)
.*? # 最短匹配任意字符(0次及以上)
.+? # 最短匹配1次及以上字符
?? # 0/1次最短匹配
{n,m}?# 区间次数最短匹配
新手踩坑案例对比
测试文本:【标题1】内容一【标题2】内容二
-
错误-贪婪匹配:正则
【.*】,一次性匹配整段【标题1】内容一【标题2】,出现匹配溢出错误 -
正确-非贪婪匹配:正则
【.*?】,分别精准匹配【标题1】、【标题2】,拆分目标内容
使用规则:多段相似内容截取、标签提取、片段清洗,一律使用非贪婪模式;单一完整内容匹配可使用贪婪模式。
5.2 分支逻辑 | 或运算(规范用法)
**|**分支符优先级为正则最低,作用为「匹配左侧表达式或右侧表达式」,支持多条件并联,适配多格式兼容、多关键词匹配场景。
核心避坑点:| 无自动分组作用,仅分隔左右相邻完整表达式,多条件匹配必须手动用 () 限定作用域,否则匹配范围错乱。
实战示例
# 基础匹配图片后缀(优化前)
jpg|png|gif
# 规范优化(分组限定作用域)
\.(jpg|png|gif)$
# 高阶适配多协议链接
(http|https|ftp)://\S+
5.3 四大修饰符全解析(g/i/m/s)
修饰符不参与字符匹配,仅修改正则全局匹配规则,是新手匹配不全、跨行失效、大小写匹配失败的核心原因,全平台通用。
| 修饰符 | 全称 | 核心作用 | 必备场景 |
|---|---|---|---|
| g | global 全局匹配 | 取消默认单条匹配,匹配全文所有符合内容 | 批量替换、批量清洗、批量筛选(必开) |
| i | ignoreCase 忽略大小写 | 匹配过程不区分英文字母大小写 | 英文账号、关键词、链接匹配 |
| m | multiline 多行模式 | 修改^ $锚点规则,匹配每一行首尾 | 逐行校验、行首行尾内容筛选 |
| s | singleline 单行模式 | 让 . 通配符匹配换行符,支持跨行匹配 | 跨行标签、多行文本截取 |
新手黄金搭配:批量清洗g、英文批量处理gi、跨行匹配gs、逐行校验gm。
5.4 捕获组与非捕获组(精准选型)
分组 () 分为两类,按需选用可避免分组错乱、性能冗余、取值报错,适配不同业务场景。
5.4.1 捕获组 ()
特性:缓存匹配内容、自动生成 $1 $2 $3 序号、支持回调取值、占用分组索引。
适用场景:内容提取、数据脱敏、格式重组、分组回调替换。
5.4.2 非捕获组 (?:)
特性:仅用于限定语法作用域,不缓存内容、不占用序号、无回调取值,性能更优。
适用场景:多分支或运算、量词作用域限定、复杂正则分层,无需提取内容的场景。
选型案例
# 需要取值 → 捕获组(手机号脱敏)
(\d{3})(\d{4})(\d{4})
# 仅分组限定作用域 → 非捕获组(多协议匹配)
(?:https|http|ftp)://
5.5 环视四件套(零宽断言高阶用法)
环视属于零宽断言,核心特性:只做条件判断、不消耗文本、不占用字符,是精准截取、条件过滤、强密码校验的高阶核心语法。
5.5.1 正向预查 (?=条件)
作用:匹配「后方是指定内容」的文本,不包含后缀条件字符。示例:匹配带句号的汉字 [\u4e00-\u9fa5](?=。)。
5.5.2 负向预查 (?!条件)
作用:匹配「后方不是指定内容」的文本,用于拦截非法后缀。示例:过滤txt后缀文件^(?!.*\.txt$).*。
5.5.3 正向后瞻 (?<=条件)
作用:匹配「前方是指定内容」的文本,不包含前缀条件字符。示例:提取https域名 (?<=https://).+。
5.5.4 负向后瞻 (?<!条件)
作用:匹配「前方不是指定内容」的文本,过滤指定前缀。示例:匹配非http开头数字 (?<!http)\d+。
5.6 字符集取反 [^] 实战精讲
[^指定字符] 匹配「所有不属于括号内的字符」,是文本清洗、非法字符过滤、内容提纯的核心语法,搭配g全局修饰符效果最佳。
可直接复用高频案例
-
只保留汉字:
[^\u4e00-\u9fa5]替换为空 -
只保留汉字+数字:
[^\u4e00-\u9fa50-9]替换为空 -
剔除所有标点特殊符号:
[^a-zA-Z0-9\u4e00-\u9fa5]替换为空 -
剔除所有空白符:
[^\S]替换为空
5.1 贪婪与非贪婪模式(完整精讲+正反案例)
正则所有量词(* + ? {n,m})默认均为贪婪模式,核心特性:尽可能匹配最长的符合条件文本;在任意量词末尾添加 ?,即可强制转为非贪婪模式,尽可能匹配最短符合条件文本,是解决「跨行匹配错乱、多内容批量误匹配」的核心关键。
核心语法对照
# 贪婪模式(默认)
.* # 匹配从第一个符合字符到文本最后末尾的所有内容
.+ # 最长匹配1次及以上字符
# 非贪婪模式(手动开启)
.*? # 最短匹配任意字符(0次及以上)
.+? # 最短匹配1次及以上字符
?? # 0/1次最短匹配
{n,m}?# 区间次数最短匹配
场景实战对比(新手必看踩坑案例)
测试文本:【标题1】内容一【标题2】内容二
-
错误-贪婪匹配:正则
【.*】,直接匹配整段【标题1】内容一【标题2】,一次性匹配到底,造成溢出错误 -
正确-非贪婪匹配:正则
【.*?】,分别匹配【标题1】、【标题2】,精准拆分目标内容
总结规则:多段相似内容截取、标签提取、片段清洗,一律使用非贪婪模式;单一内容完整匹配可使用贪婪模式。
5.2 分支逻辑 | 或运算(完整用法+避坑)
|****分支符 ** 优先级是正则所有语法中最低**的,作用为「匹配左侧表达式 或 右侧表达式」,支持多条件并联,适用于多格式兼容、多关键词匹配场景。
核心避坑点:| 仅分隔左右相邻完整表达式,无自动分组作用,多条件匹配必须手动用 () 限定作用域,否则匹配范围彻底错乱。
基础多条件示例
# 匹配三种常见图片后缀
jpg|png|gif
# 正确优化(限定整体作用域)
\.(jpg|png|gif)$
高阶实战:兼容多种链接协议
(http|https|ftp)://\S+
可批量匹配http、https、ftp三类协议的所有链接,适配全场景链接清洗。
5.3 修饰符系统(g/i/m/s 全解析,新手必掌握)
修饰符不参与字符匹配,仅修改正则全局匹配规则,是90%新手匹配不全、大小写失效、跨行失败的核心原因,所有工具、代码通用,必须搭配使用。
| 修饰符 | 全称 | 核心作用 | 必备使用场景 |
|---|---|---|---|
| g | global 全局匹配 | 默认只匹配第一个结果,开启后匹配全文所有符合内容 | 批量替换、批量筛选、批量清洗(必开) |
| i | ignoreCase 忽略大小写 | 匹配过程不区分大小写字母 | 英文关键词、账号、链接匹配 |
| m | multiline 多行模式 | 修改^ $锚点规则,匹配每一行首尾 | 逐行校验、行首行尾内容筛选 |
| s | singleline 单行模式 | 让 . 通配符匹配换行符,支持跨行匹配 | 跨行标签、多行文本截取 |
新手黄金搭配:批量清洗 g、英文批量处理 gi、跨行匹配 gs、逐行校验 gm。
5.4 捕获组 vs 非捕获组(完整区分+实战选型)
分组 () 分为两类,新手极易混淆,选错会导致分组错乱、性能冗余、取值报错。
5.4.1 捕获组 ()
特性:缓存匹配内容、自动生成序号 $1 $2 $3、支持回调取值、占用分组索引。
适用场景:需要提取内容、数据脱敏、格式重组、分组回调替换。
5.4.2 非捕获组 (?:)
特性:仅分组、不缓存、不占用序号、无回调,仅用于限定语法作用域,性能更优。
适用场景:多分支或运算、量词作用域限定、复杂正则分层,无需提取内容的场景。
正反选型案例
# 需要取值 → 捕获组
(\d{3})(\d{4})(\d{4})
# 仅分组或运算 → 非捕获组
(?:https|http|ftp)://
六、高频实战场景补齐
补充基础章节未覆盖的办公、表单、代码清洗高频场景,所有案例可直接复用,适配日常绝大多数业务需求。
6.1 文本首尾去空格(办公刚需)
解决文档、表格复制内容首尾多余空格,保留文本中间正常空格,规整文本格式。
正则:^\s+|\s+$ 替换内容:空 开启全局g
效果: 正则零基础 → 正则零基础
6.2 微信号、QQ号精准校验
微信号规则:字母开头,6-20位,支持字母、数字、下划线、短横线
^[a-zA-Z][a-zA-Z0-9_-]{5,19}$
QQ号规则:5-13位纯数字
^\d{5,13}$
6.3 三级密码强度校验(表单通用)
覆盖初中高三级密码规则,适配网站、系统表单密码校验场景。
初级密码:字母+数字,8-16位
^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{8,16}$
中级密码:大小写字母+数字,8-16位
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,16}$
高级密码:大小写+数字+特殊符号,8-16位
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[a-zA-Z\d!@#$%^&*]{8,16}$
6.4 代码注释批量清除
适配JS、CSS、Java等代码文本清洗,快速去除冗余注释,保留有效代码。
-
清除单行//注释:
//.*替换为空(全局g) -
清除多行/* */注释:
/\*.*?\*/替换为空(开启g+s)
6.5 文本重复内容去重
去除连续重复的文字、符号、空格,一键规整杂乱文本。
正则:(.+?)\1+ 替换内容:$1
效果:好好好好学习 → 好好学习
6.1 文本首尾去空格(办公万能清洗)
解决文档、表格复制内容首尾多余空格问题,保留文本中间正常空格。
正则:^\s+|\s+$ 替换内容:空 开启全局g
效果: 正则零基础 → 正则零基础
6.2 微信号、QQ号精准校验
微信号规则:字母开头,6-20位,支持字母、数字、下划线、短横线
^[a-zA-Z][a-zA-Z0-9_-]{5,19}$
QQ号规则:5-13位纯数字
^\d{5,13}$
6.3 密码强度三级校验(表单刚需)
初级密码:字母+数字,8-16位
^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{8,16}$
中级密码:大小写字母+数字,8-16位
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,16}$
高级密码:大小写+数字+特殊符号,8-16位
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[a-zA-Z\d!@#$%^&*]{8,16}$
6.4 代码注释批量清除
适用于清洗JS、CSS、Java等代码文本,去除冗余注释
-
清除单行//注释:
//.*替换为空(全局g) -
清除多行/* */注释:
/\*.*?\*/替换为空(开启g+s)
6.5 文本重复内容去重
去除连续重复的文字、符号、空格,规整文本格式
正则:(.+?)\1+ 替换内容:$1
效果:好好好好学习 → 好好学习
七、正则跨平台适配差异
正则核心语法全平台通用,仅转义、取值、修饰符配置存在细微差异,统一适配规则即可无缝适配所有工具与代码场景。
7.1 编辑器端(VS Code / Notepad++ / 在线工具)
-
分组回调取值:
$1 $2 $3 -
特殊符号转义:单层转义
\.\+ -
匹配配置:手动勾选全局g、大小写i、多行m
7.2 代码端(Python / JavaScript)
-
分组回调取值:
\\1 \\2 \\3 -
特殊符号转义:双层转义
\\.\\+ -
匹配配置:通过代码参数设置(re.G、re.I、re.S)
八、调试工具与快速排错体系
8.1 零基础免费调试工具
推荐通用免费在线正则表达式测试工具,无需安装,支持实时高亮匹配、修饰符切换、语法报错提示、分组预览,是新手调试首选。
8.2 高频报错快速排错手册
-
只匹配第一个内容:未开启全局g修饰符
-
匹配内容溢出、过多:将贪婪模式
.*改为非贪婪模式.*? -
行首尾匹配失效:未开启多行m修饰符
-
跨行内容匹配不到:未开启单行s修饰符,
.无法匹配换行符 -
特殊符号匹配失败:未对功能符号添加转义符
\ -
分组取值错乱:无用分组未改为非捕获组
(?:) -
大小写匹配不全:未开启i忽略大小写修饰符
8.1 免费零基础调试工具
推荐:在线正则表达式测试工具(全网通用免费版),支持实时高亮匹配、修饰符切换、语法报错提示、分组预览,无需安装,零基础首选。
九、核心语法速记总表
汇总全文所有基础、高阶、环视、分组语法,一站式快速查阅记忆,替代零散知识点。
| 语法符号 | 核心作用 | |
|---|---|---|
\d | 匹配任意单个数字(0-9) | |
\w | 匹配字母、数字、下划线 | |
\s | 匹配所有空白符(空格、换行、制表符) | |
. | 匹配任意单个字符(默认不含换行) | |
[] | 自定义字符集,匹配区间内任意单个字符 | |
[^] | 字符集取反,匹配区间外所有字符 | |
* | 匹配0次或多次,默认贪婪模式 | |
+ | 匹配1次或多次,默认贪婪模式 | |
? | 匹配0/1次;量词后使用切换非贪婪模式 | |
^ $ | 首尾锚点,实现精准整段/单行匹配 | |
() | 捕获组:分组、缓存内容、回调取值替换 | |
(?:) | 非捕获组:仅分组、不缓存、不占序号 | |
| ` | ` | 分支或运算,匹配左右任意一套规则 |
(?=) | 正向预查:匹配指定后缀内容 | |
(?!) | 负向预查:拦截指定后缀内容 | |
(?<=) | 正向后瞻:匹配指定前缀内容 | |
(?<!) | 负向后瞻:拦截指定前缀内容 |
十、可直接复用替换正则速查表
汇总办公、数据清洗、日志处理、隐私脱敏高频正则,所有内容无需修改,直接复制即可使用,覆盖99%日常场景。
| 使用场景 | 替换正则 | 替换内容 | 效果示例 | 适配说明 |
|---|---|---|---|---|
| 清除所有数字 | \d | 空 | 测试123内容456→测试内容 | 全平台通用,适配各类文本清洗 |
| 清除所有英文字母 | [a-zA-Z] | 空 | abc测试123xyz→测试123 | 全覆盖大小写字母,无兼容问题 |
| 规整多余空白 | \s+ | 单个空格 | 正则 零基础 学习→正则 零基础 学习 | 统一空格、换行、制表符混乱格式 |
| 批量删除空行 | ^\s*$\n | 空 | 清空全文空白换行,排版整洁 | 编辑器适配最佳,需开启多行模式 |
| 小数点替换为横杠 | \. | - | 2025.07.30→2025-07-30 | 标准转义语法,全平台通用 |
| 日期斜杠转横杠 | (\d{4})/(\d{2})/(\d{2}) | $1-$2-$3 | 2025/07/30→2025-07-30 | 编辑器用$1,代码端替换为\1 |
| 清除HTTP/HTTPS链接 | https?:\/\/\S+ | 空 | 详情https://baidu\.com→详情 | 适配所有网页、IP链接清洗 |
| 清除HTML标签 | <.*?> | 空 | <p>正则测试</p>→正则测试 | 必须开启非贪婪+全局模式 |
| 手机号中间四位脱敏 | (\d{3})\d{4}(\d{4}) | $1****$2 | 13800138000→138****8000 | 轻度脱敏,保留首尾辨识度 |
| 手机号完整脱敏 | (\d{3})\d{8} | $1******** | 13800138000→138******** | 高强度隐私脱敏,适配公开场景 |
| 邮箱用户名脱敏 | (\w{2})\w+(@\w+\.\w+) | $1***$2 | test@163.com→te***@163.com | 批量脱敏专用,适配用户数据处理 |
| 身份证脱敏 | (\d{6})\d{8}([\dX]{4}) | $1********$2 | 110101199003071234→110101********1234 | 兼容身份证末尾大写X,适配政务数据 |
| IP地址脱敏 | (\d{1,3}\.\d{1,3})\.\d{1,3}\.\d{1,3} | $1.*.* | 192.168.1.1→192.168.*.* | 运维日志、设备配置文档专用 |
十一、零基础课后练习题
题目由易到难,覆盖全文基础、实操、高阶知识点,搭配调试工具练习,学完即可学以致用,彻底吃透正则核心。
11.1 基础语法题
-
编写正则,匹配纯3-6位数字的文本
-
编写正则,匹配以字母开头,仅含字母数字的5-10位账号
-
编写正则,剔除文本中所有特殊符号,只保留汉字和数字
11.2 场景实操题
-
批量将文本中所有 http 链接强制替换为 https
-
清洗文本,去除所有空行、首尾空格、多余连续空格
-
对11位手机号实现「前3后4可见、中间隐藏」的脱敏替换
11.3 高阶拔高题
-
编写正则,校验必须包含大小写、数字、特殊符号的8位以上密码
-
批量提取文本中所有HTML标签内的纯文本内容
-
匹配所有非百度、非谷歌的外网链接
| 使用场景 | 替换正则 | 替换内容 | 替换效果示例 | 适配说明 |
|---|---|---|---|---|
| 清除所有数字 | \d | 空 | 测试123内容456→测试内容 | 全平台通用,编辑器、代码、在线工具均可使用 |
| 清除所有英文字母 | [a-zA-Z] | 空 | abc测试123xyz→测试123 | 全覆盖大小写字母,兼容性无差异 |
| 规整多余空白 | \s+ |
本章汇总办公、数据处理、日志清洗、内容审核高频正则,所有语句无需修改、可直接复制使用,适配绝大多数日常场景。
| 使用场景 | 替换正则 | 替换内容 | 替换效果示例 | 适配说明 |
|---|---|---|---|---|
| 清除所有数字 | \d | 空 | 测试123内容456→测试内容 | 全平台通用,编辑器、代码、在线工具均可使用 |
| 清除所有英文字母 | [a-zA-Z] | 空 | abc测试123xyz→测试123 | 全覆盖大小写字母,兼容性无差异 |
| 规整多余空白 | \s+ | 单个空格 | 正则 零基础 学习→正则 零基础 学习 | 匹配空格/换行/制表符,文本排版规整首选 |
| 批量删除空行 | ^\s*$\n | 空 | 清空全文空白换行,排版整洁 | VS Code、Notepad++效果最佳,需开启多行匹配 |
| 小数点替换为横杠 | \. | - | 2025.07.30→2025-07-30 | 全平台通用,转义语法标准无兼容问题 |
| 日期斜杠转横杠 | (\d{4})/(\d{2})/(\d{2}) | $1-$2-$3 | 2025/07/30→2025-07-30 | 编辑器用$1,Python代码需改为\1 |
| 清除HTTP/HTTPS链接 | https?:\/\/\S+ | 空 | 详情https://baidu\.com→详情 | 适配所有链接格式,文本清洗通用 |
| 清除HTML标签 | <.*?> | 空 | <p>正则测试</p>→正则测试 | 必须开启全局+非贪婪模式,避免误删内容 |
| 手机号中间四位脱敏 | (\d{3})\d{4}(\d{4}) | $1****$2 | 13800138000→138****8000 | 编辑器用$1,Python代码替换为\\1****\\2 |
| 手机号完整脱敏 | (\d{3})\d{8} | $1******** | 13800138000→138******** | 全平台兼容,适合高强度隐私脱敏 |
| 邮箱用户名脱敏 | (\w{2})\w+(@\w+\.\w+) | $1***$2 | test@163.com→te***@163.com | 批量脱敏首选,代码端微调变量符即可 |
| 身份证脱敏 | (\d{6})\d{8}([\dX]{4}) | $1********$2 | 110101199003071234→110101********1234 | 支持身份证大写X,适配后端业务脱敏 |
| IP地址脱敏 | (\d{1,3}\.\d{1,3})\.\d{1,3}\.\d{1,3} | $1.*.* | 192.168.1.1→192.168.*.* | 运维日志、设备配置文档专用 |