正则表达式零基础学习

0 阅读24分钟

一、前言

本文适合完全没有编程、正则基础的读者,从零系统讲解正则表达式核心语法、匹配规则。全文以“易懂、实用、可落地”为原则,结合大量办公、数据处理、文本清洗实战案例,帮助读者快速上手。

全文采用「概念讲解+语法示例+逐行拆解+实战案例+替换实操」的学习模式,学完可独立完成表单校验、文本筛选、日志解析、代码过滤、数据脱敏、格式统一等日常工作场景需求。

二、正则基础语法

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  # 匹配任意单个空白符(空格、换行、制表符)
.   # 匹配任意单个字符(换行符除外)

实战替换案例

  1. 清空全文数字:正则\d,替换内容为空,可批量剔除文本中所有数字

  2. 规整文本空白:正则 \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 字符集取反 [^] 实战精讲

字符集取反 [^内容] 表示匹配所有不属于括号内的字符,是文本清洗、非法字符过滤的核心语法,搭配全局修饰符使用效果最佳。

高频实战案例

  1. 只保留汉字,剔除所有其他内容:正则 [^\u4e00-\u9fa5],替换为空

  2. 只保留数字和汉字:正则 [^\u4e00-\u9fa50-9],替换为空

  3. 剔除所有标点符号、特殊符号:正则 [^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.comadmin-01@qq.comuser.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.comadmin-01@qq.comuser.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-$32025/07/30→2025-07-30代码端替换为\1取值
清除HTTP/HTTPS链接https?:\/\/\S+详情https://baidu\.com→详情适配所有网页链接
清除HTML标签<.*?><p>正则测试</p>→正则测试非贪婪模式,防止误删
手机号中间四位脱敏(\d{3})\d{4}(\d{4})$1****$213800138000→138****8000通用隐私脱敏方案
手机号完整脱敏(\d{3})\d{8}$1********13800138000→138********高强度隐私保护
邮箱用户名脱敏(\w{2})\w+(@\w+\.\w+)$1***$2test@163.com→te***@163.com批量脱敏专用
身份证脱敏(\d{6})\d{8}([\dX]{4})$1********$2110101199003071234→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%以上的新手错误,统一规范使用逻辑,彻底规避匹配错乱、替换失效、格式报错等问题,是日常实操的核心准则。

  1. 精准校验必加锚点:表单校验、完整数据格式判断,必须搭配 ^ $ 首尾锚点实现精准匹配;批量全局替换可省略锚点,避免出现匹配不全、局部替换失效问题。

  2. 特殊符号必转义. / + ? * () [ ] { } \ 等正则功能符号,若需要匹配符号本身,必须添加 \ 转义,是替换场景最高频出错点。

  3. 标签与多片段匹配用非贪婪:HTML标签截取、多段相似文本提取、短文本拆分场景,统一使用 .*? 非贪婪模式,杜绝贪婪模式导致的匹配溢出、批量串连错乱问题。

  4. 量词作用域精准限定:所有量词仅修饰紧邻前方的单个字符或分组,批量匹配多字符内容时,必须用 () 分组包裹目标内容,避免作用域偏差。

  5. 反向匹配优选负向预查:数据清洗、非法内容拦截、合规内容过滤场景,优先使用 (?!) 负向预查,相比传统取反匹配精度更高、适配场景更广。

  6. 替换核心固定逻辑:复杂替换、数据脱敏、格式规整统一遵循「分组匹配关键内容 + 1/1/2回调保留有效内容 + 清空无关内容」的逻辑,高效不报错。

  7. 批量操作必开全局g:正则默认仅匹配第一个符合内容,所有批量替换、批量筛选场景,必须开启g全局修饰符,否则仅修改首个匹配项。

  8. 分支或运算必加分组| 或运算优先级为正则最低,多条件、多格式兼容匹配时,必须用 () 限定作用域,防止匹配范围错乱。

  9. 按需搭配多行/单行修饰符:逐行首尾校验开启m多行模式,跨行文本、跨行标签匹配开启s单行模式,根据场景适配避免匹配失效。

  10. 区分平台取值与转义规则:编辑器(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)

修饰符不参与字符匹配,仅修改正则全局匹配规则,是新手匹配不全、跨行失效、大小写匹配失败的核心原因,全平台通用。

修饰符全称核心作用必备场景
gglobal 全局匹配取消默认单条匹配,匹配全文所有符合内容批量替换、批量清洗、批量筛选(必开)
iignoreCase 忽略大小写匹配过程不区分英文字母大小写英文账号、关键词、链接匹配
mmultiline 多行模式修改^ $锚点规则,匹配每一行首尾逐行校验、行首行尾内容筛选
ssingleline 单行模式. 通配符匹配换行符,支持跨行匹配跨行标签、多行文本截取

新手黄金搭配:批量清洗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%新手匹配不全、大小写失效、跨行失败的核心原因,所有工具、代码通用,必须搭配使用。

修饰符全称核心作用必备使用场景
gglobal 全局匹配默认只匹配第一个结果,开启后匹配全文所有符合内容批量替换、批量筛选、批量清洗(必开)
iignoreCase 忽略大小写匹配过程不区分大小写字母英文关键词、账号、链接匹配
mmultiline 多行模式修改^ $锚点规则,匹配每一行首尾逐行校验、行首行尾内容筛选
ssingleline 单行模式. 通配符匹配换行符,支持跨行匹配跨行标签、多行文本截取

新手黄金搭配:批量清洗 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-$32025/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****$213800138000→138****8000轻度脱敏,保留首尾辨识度
手机号完整脱敏(\d{3})\d{8}$1********13800138000→138********高强度隐私脱敏,适配公开场景
邮箱用户名脱敏(\w{2})\w+(@\w+\.\w+)$1***$2test@163.com→te***@163.com批量脱敏专用,适配用户数据处理
身份证脱敏(\d{6})\d{8}([\dX]{4})$1********$2110101199003071234→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 基础语法题

  1. 编写正则,匹配纯3-6位数字的文本

  2. 编写正则,匹配以字母开头,仅含字母数字的5-10位账号

  3. 编写正则,剔除文本中所有特殊符号,只保留汉字和数字

11.2 场景实操题

  1. 批量将文本中所有 http 链接强制替换为 https

  2. 清洗文本,去除所有空行、首尾空格、多余连续空格

  3. 对11位手机号实现「前3后4可见、中间隐藏」的脱敏替换

11.3 高阶拔高题

  1. 编写正则,校验必须包含大小写、数字、特殊符号的8位以上密码

  2. 批量提取文本中所有HTML标签内的纯文本内容

  3. 匹配所有非百度、非谷歌的外网链接

使用场景替换正则替换内容替换效果示例适配说明
清除所有数字\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-$32025/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****$213800138000→138****8000编辑器用$1,Python代码替换为\\1****\\2
手机号完整脱敏(\d{3})\d{8}$1********13800138000→138********全平台兼容,适合高强度隐私脱敏
邮箱用户名脱敏(\w{2})\w+(@\w+\.\w+)$1***$2test@163.com→te***@163.com批量脱敏首选,代码端微调变量符即可
身份证脱敏(\d{6})\d{8}([\dX]{4})$1********$2110101199003071234→110101********1234支持身份证大写X,适配后端业务脱敏
IP地址脱敏(\d{1,3}\.\d{1,3})\.\d{1,3}\.\d{1,3}$1.*.*192.168.1.1→192.168.*.*运维日志、设备配置文档专用