正则表达式教程 - 从零入门到常用语法(系统整理)

1653 字
8 分钟
正则表达式教程 - 从零入门到常用语法(系统整理)

🌟 正则难在哪#

正则被公认”看着像乱码”。但其实它是一套极简的语言:只有几十个符号,组合起来就能描述复杂模式。难的不是符号本身,而是”组合方式”和”优先级”。

本文按”由浅入深”的顺序,把核心概念讲清楚,并配大量示例。边学边练,用正则测试器最快。


一、正则是什么#

正则(Regular Expression)是描述”一段文本长什么样”的表达式。比如 \d{3} 表示”3 个数字”。它主要用于四件事:查找、校验、提取、替换。

几乎所有编程语言和编辑器都支持正则,掌握一次,到处能用。


二、普通字符与转义#

  • 直接写 abc 就是匹配 abc;
  • 想匹配特殊符号本身,加反斜杠:\. 匹配真正的点号。

常见需要转义的字符:. + * ? ( ) [ ] { } ^ $ | \

例:匹配文件名里的点,用 \. 而不是 .(. 会匹配任意字符)。


三、字符类:一组可选项#

写法含义
[abc]a、b 或 c 中任意一个
[a-z]小写字母
[A-Za-z]任意英文字母
[^abc]除 a、b、c 之外
\d数字
\D非数字
\w字母数字下划线
\s空白

例:[A-Za-z0-9_] 等价于 \w。


四、量词:重复几次#

量词含义
*0 次或多次
+1 次或多次
?0 或 1 次
{3}恰好 3 次
{2,5}2 到 5 次
{2,}至少 2 次

例:\d{3} 匹配 3 位数字;\w+ 匹配一个或多个单词字符。

贪婪 vs 懒惰#

  • 贪婪(默认):尽量多匹配;
  • 懒惰:加 ?,尽量少匹配。

对 <a><b> 用 <.+> 会匹配整个 <a><b>;用 <.+?> 只匹配 <a>。


五、分组与捕获#

  • (abc):捕获组,把匹配到的内容单独取出;
  • (?:abc):非捕获组,只分组不捕获;
  • (?<name>abc):命名组,便于按名取值。

例:(\d{4})-(\d{2})-(\d{2}) 可分别取出年、月、日。

反向引用:\1 引用第 1 组,如 \b(\w+)\s+\1\b 匹配重复单词。


六、锚点:匹配位置#

锚点含义
^开头
$结尾
\b单词边界

例:^\d+$ 表示”整串都是数字”;\bcat\b 只匹配独立的 cat,不匹配 category。


七、或与分支#

cat|dog 匹配 cat 或 dog;配合分组 (cat|dog)s 匹配 cats 或 dogs。

注意分支的顺序:(a|ab) 对 ab 会先匹配 a。需要长优先时把长的放前面。


八、断言:前后条件#

写法含义
(?=x)后面是 x(前瞻)
(?!x)后面不是 x(负前瞻)
(?<=x)前面是 x(后顾)
(?<!x)前面不是 x(负后顾)

例:密码”至少一个数字”可用 (?=.*\d) 前瞻。详见正则前瞻与后顾怎么用。


九、Flags:匹配开关#

Flag作用
i忽略大小写
g全局
m多行
s. 匹配换行
uUnicode

详见正则 Flags 详解。


十、实战练习(自己动手)#

在正则测试器里试:

题目参考答案
匹配 11 位手机号^1[3-9]\d{9}$
匹配邮箱[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}
匹配 YYYY-MM-DD^\d{4}-\d{2}-\d{2}$
提取所有 URLhttps?://[^\s]+
匹配中文[\u4e00-\u9fa5]+
匹配整数或小数^-?\d+(\.\d+)?$
去掉 HTML 标签<[^>]+>
交换 a b 为 b a^(\w+)\s+(\w+)$ → $2 $1

十一、常见错误#

  1. 忘转义:. + 被当特殊符号;
  2. 忘 g:只匹配第一处;
  3. 贪婪过头:.* 吃掉太多,改用 .*?;
  4. ^$ 只匹配整串:多行要开 m;
  5. . 不匹配换行:开 s 或用 [\s\S];
  6. 灾难性回溯:(a+)+ 这类写法要避免,见 ReDoS;
  7. 组编号错位:加一个括号,后面组号顺延,建议用命名组。

十二、学习路径建议#

  1. 先掌握字符类 + 量词 + 锚点(够用 80%);
  2. 再学分组的捕获与引用;
  3. 然后断言与 Flags;
  4. 最后了解各语言差异(多语言引擎)。

遇到看不懂的正则,用正则解释器拆解;需要速查用正则语法速查表。


❓ 常见问题(FAQ)#

正则要背吗? 不用背。理解分类,常用时查[正则语法速查](https://www.xingdian.net/blog/posts/regex-cheatsheet/)即可。
怎么练最快? 在[正则测试器](https://www.xingdian.net/app/regex/tester/)里边写边看结果,比看书快得多。
看不懂别人的正则? 用[正则解释器](https://www.xingdian.net/app/regex/explain/)逐段拆解,或用[正则可视化](https://www.xingdian.net/app/regex/visualize/)看结构。
贪婪和懒惰怎么选? 默认贪婪;需要"匹配到最近的位置"时用懒惰(加 `?`)。
各语言语法一样吗? 基础通用,命名组、Flags、断言有差异,见[多语言引擎](https://www.xingdian.net/app/regex/engines/)。
学习正则需要多久? 掌握 80% 常用语法,认真练一两天即可;深入断言/性能优化需要更多实践。
正则能替代解析器吗? 不适合解析复杂嵌套结构(如完整 HTML/JSON),这类场景用专门解析器更稳。
有推荐的练习顺序吗? 按本文"实战练习"表逐题做,再尝试用[常用格式正则](https://www.xingdian.net/app/regex/formats/)里的规则反推写法。

十三、优先级与常见组合#

正则也有”优先级”,理解它才能读懂复杂表达式:

  1. 转义最高(\. 就是一个字符);
  2. 字符类/分组其次([...]、(...));
  3. 量词作用在紧邻的元素上(ab+ = a + b+);
  4. 连接(abc 表示 a 后接 b 后接 c);
  5. 分支 | 优先级最低(ab|cd = ab 或 cd)。

常见组合:

目标写法
非空任意行^.+$
整数或小数^-?\d+(\.\d+)?$
中英文数字^[\u4e00-\u9fa5A-Za-z0-9]+$
日期时间^\d{4}-\d{2}-\d{2}( \d{2}:\d{2})?$
带引号字符串"[^"]*"

十四、进阶主题(了解即可)#

  • 原子组与占有量词:(?>...)、a++,减少回溯;
  • 条件匹配:(?(1)yes|no),部分引擎支持;
  • 递归:PCRE 支持 (?R),可匹配嵌套结构;
  • Unicode 属性:\p{Script=Han} 匹配中文,\p{Emoji} 匹配表情;
  • 粘性匹配:JS 的 y 标志,用于逐段解析。

这些语法各引擎支持不一,迁移时用多语言引擎核对。


十五、正则 vs 通配符#

  • 通配符(*、?):只用于文件名匹配,简单;
  • 正则:功能完整,支持分组、量词、断言、回溯引用。

例:通配符 *.txt 只能匹配文件名;正则 \w+\.txt$ 可精确控制。


十六、正则能做什么、不能做什么#

适合:格式校验、文本查找替换、简单提取、日志解析。

不适合:解析嵌套结构(完整 HTML/JSON/XML)、复杂语法分析——这些用专门解析器更稳。正则会因嵌套而产生回溯问题。


💬 总结#

正则的核心就三块:字符(匹配什么)、量词(几次)、位置(哪里),再加分组与断言。按本文顺序学,配合正则测试器多练,很快上手。

立即体验:访问 学习与参考

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

最后更新于 2026-09-13,距今已过 33 天

部分内容可能已过时

相关文章 智能推荐
1
正则表达式语法速查表 - 元字符/量词/断言/Flags 大全
正则工具 正则表达式语法速查:元字符、字符类、量词、分组、断言、边界、转义与 Flags 一览,含含义与示例,适合随时查阅。附在线正则速查与测试工具。
2
Python 和 Java 正则怎么写 - 跨语言正则语法对照
正则工具 Python 和 Java 正则写法对照:原始字符串、命名捕获组、Flags、反向引用、前瞻后顾的差异,附代码示例。帮你把正则正确迁移到目标语言。在线多语言正则工具。
3
手机号正则和邮箱正则怎么写 - 常用正则表达式示例大全
正则工具 手机号正则、邮箱正则、身份证正则、URL正则、银行卡正则怎么写?给出可直接复制使用的表达式、逐段解释与正误示例,覆盖网络/联系/身份/日期/数字/字符/开发场景,并说明各语言引擎差异。附在线常用格式正则工具。
4
正则表达式转代码 - 转 JavaScript/Python/Java/Go/PHP
正则工具 正则怎么用到代码里?本文给出 JavaScript、Python、Java、Go、PHP、C# 的写法模板(含转义、Flags、命名组),并介绍在线正则转代码工具,一键得到可复制的代码示例。
5
正则替换怎么用 - 在线正则表达式批量替换工具
正则工具 正则替换怎么用?在线正则表达式替换工具支持 $1、$&、$<name> 等替换引用,实时显示替换前后文本与替换次数。含日期改写、去空格、加前缀、键值重排等 10+ 场景示例与 FAQ,浏览器本地处理。
随机文章 随机推荐
公告
🎉 已升级 2.0 版本,欢迎使用。
分类
标签
站点统计
文章
197
分类
24
标签
747
总字数
334,099
运行时长
0 天
最后活动
0 天前

目录