首页 › programming › 正则表达式:一条百秒神课深读

一行顶二十行:Fireship 百秒正则神课,为什么十年来一直在翻红

概述

在 YouTube 编程教学区,有一条视频的地位非常特殊:它只有一百秒左右,却把一个让无数程序员望而生畏的主题——正则表达式(Regular Expression, regex)——讲成了一个人人敢点开的“预告片”。这就是 Fireship 频道的《Regex in 100 Seconds》。这条视频自发布以来长期被 Reddit 的 r/programming、Hacker News 和 X(Twitter)上的程序员反复转发,每逢“AI 要不要取代程序员”“LLM 会不会写正则”之类的讨论升温,它就会回到人们的转发列表里。2025 年以来,随着 AI 编程助手大规模替人生成正则表达式、多起 ReDoS(正则拒绝服务)事故复盘在技术社区流传,这条百秒老课再次成为新手的共同入口。

本文按“单视频深读”的方式,把这条视频的叙事骨架逐层拆开,补上它没时间讲的理论源头、工程陷阱与安全边界,并给出三条马上能用的行动建议——让你没看过视频也能看懂,看过视频的人能多懂一层。

视频基本信息

项目 详情
原题 Regex in 100 Seconds(据频道公开页面)
中文对照 《100 秒搞懂正则表达式》
频道 Fireship(主理人 Jeff Delaney,前端/全栈领域头部知识频道)
发布时间 约 2020 年初(据频道页面,未实时核验)
播放量 百万级到千万级之间(据频道页面为七位数以上,未实时核验精确值)
时长/形式 约 100 秒,快节奏动画 + 代码演示(JavaScript)
观看方式 在 YouTube 搜索频道名 Fireship + 标题 Regex in 100 Seconds 即达;因本轮无法核验视频 ID,此处不提供 watch 链接以免误导

选它的理由有三条:第一,它是全网被引用最多的正则入门短片之一,Fireship 的“100 Seconds”系列本身就是一种被反复模仿的内容范式;第二,它的叙事顺序恰好是正则知识体系的天然目录,非常适合做深读骨架;第三,老视频因 AI 编程话题回流,正符合“经典内容再发现”的解读价值。

一、核心主张拆解:一百秒里到底装了什么

这条视频的秘密不在于信息量大,而在于信息密度被压缩到了一个精心设计的临界点:每一秒都在给观众一个新的“积木”,且每块积木都能立刻用一个直观例子验证。按视频的叙事顺序,它的内容可以拆成五层。

1. 开场定调:正则不是符号堆,是一门“微型语言”

视频开场用一句话把正则重新定义:它是一种用极少的字符描述一大类字符串模式的方式——你写下的不是一堆匹配规则,而是一个“程序的程序”。演示用的例子是经典的场景:从一段文本里找出所有符合某种模式的片段(比如匹配一段日期、一串数字或一个邮箱形状的东西),用 JavaScript 的 match 方法一行完成,而等价的命令式写法需要十几个字符判断加循环。

这一层的认知价值经常被低估。多数初学者怕正则,不是因为符号难,而是因为把它当成需要背诵的符号表。视频把它重新框定为“语言”——有字母(字面量)、有词汇(字符类)、有语法(量词、分组)、有语义(捕获与替换)——学习的心理负担立刻从“死记”变成“理解后组合”。这个框定是对的,而且有理论依据:正则表达式在形式语言理论里本来就是“正则语言”的描述工具,与有限自动机一一对应(下文溯源部分展开)。

2. 字符层:字面量、字符集与范围

视频的第二步是搭积木的地基:

3. 结构层:量词——正则表达力的第一次跃迁

接下来视频进入量词(quantifiers),这是正则从“字符匹配”升级为“模式匹配”的关键一步:

视频用一个组合例子展示了积木的威力:\d{3}-\d{4} 之类的一小串符号就能匹配一个电话号码形状的字符串。正则的“一行顶二十行”就发生在这一层:量词把“重复”这个命令式语言里最啰嗦的结构(循环)压缩成了一个符号。

这里有一个视频受时长所限只可能一笔带过、却极其重要的知识点:贪婪与懒惰。默认情况下量词是贪婪的——<.*> 在匹配 "<a><b>" 时会一口气吞掉整个字符串,因为它“能吃多少吃多少”;而懒惰版本 <.*?> 会在第一个 > 处停下,得到 "<a>"。生产环境里大量“正则匹配得太宽”的 bug 都源于此。百秒课没时间讲,本文替它补上。

4. 语义层:分组、捕获与锚点

视频的后半段给了三样让正则从“匹配”变成“可编程”的武器:

5. 收尾:工具与文化的会心一笑

视频结尾推荐了在线调试工具(Fireship 演示中使用的是 regex101 一类的可视化正则编辑器,可以逐符号高亮解释并实时测试),并且几乎必然会触碰那个流传了二十多年的程序员老梗:“有些人遇到问题就想:我知道了,我用正则吧。现在他们有两个问题了。"(出自 Netscape 早期工程师 Jamie Zawinski 的签名档,1990 年代末开始流传。)用一个自嘲梗收尾,既是幽默,也是视频隐含的第三条主张:正则是杠杆,杠杆放大能力也放大错误。

二、知识与理论溯源:这条百秒视频背后站着八十年历史

一条百秒短视频当然没讲这些,但“多懂一层”的关键就在这里:视频里每一个语法糖,都有明确的理论与工程出处。

graph TD
    A["一条正则 = 一行微型程序"] --> B["字符层: 字面量 / 字符集 / 范围 / 元字符"]
    A --> C["结构层: 量词 * + ? 乘加运算"]
    A --> D["语义层: 分组捕获 / 锚点 / 前瞻断言"]
    B --> E["应用: 校验 / 搜索 / 查找替换"]
    C --> E
    D --> E
    E --> F["陷阱一: 灾难性回溯 ReDoS"]
    E --> G["陷阱二: 贪婪匹配过宽"]
    E --> H["陷阱三: 方言差异 PCRE vs POSIX vs RE2"]
    F --> I["根治: Thompson 构造法 NFA 模拟, RE2 / Rust regex 线性引擎"]
    G --> J["根治: 懒惰量词 + 锚点限定边界"]
    H --> K["根治: 明确目标引擎, regex101 逐符号实测"]
    I --> L["AI 时代分工: 机器写, 人负责读与验证"]
    J --> L
    K --> L

1. 从神经元模型到形式语言(1943–1956)。 正则表达式的数学源头是神经科学:1943 年,Warren McCulloch 与 Walter Pitts 提出了著名的“麦卡洛克–皮茨神经元”形式化模型。1956 年,数学家 Stephen Kleene 在论文《Representation of Events in Nervous Nets and Finite Automata》中,为这类神经网络的“可表达事件”建立了代数描述,命名为正则事件(regular events)——这就是"regular expression"的直系祖先。Kleene 证明的关键结果(今称 Kleene 定理):正则表达式所描述的语言,恰好是有限自动机能识别的语言。你在视频里看到的每个符号,本质上都是对一个有限状态机的紧凑编码。

2. 从理论到工具:Ken Thompson 与 grep(1968–1974)。 1968 年,贝尔实验室的 Ken Thompson 在《Communications of the ACM》发表论文《Regular Expression Search Algorithm》,把正则表达式即时编译成 IBM 7094 的机器码来执行搜索,并把该能力带进了 QED 编辑器。随后在 Unix 的 ed 编辑器中,"g/re/p"(globally search a regular expression and print)这一命令如此常用,以至于 1974 年前后被独立成了一个程序——grep。你今天在每一门语言里用的正则,调用链都可以一路追到这台 PDP 机器上的这三个字母。

3. 两条引擎路线:回溯派与自动机派(1968–2010 至今)。 Thompson 的实现方式(把正则构造成 NFA,再模拟其状态集合)有一个惊人性质:匹配时间与输入长度成线性关系。但 1980 年代以来主流语言内置的正则引擎(PCRE 风格)大多改用回溯(backtracking)实现——写起来简单、支持前瞻后顾等扩展语法,但最坏情况会指数爆炸。2007 年,Plan 9 与 Go 的早期核心开发者 Russ Cox 发表系列文章《Regular Expression Matching Can Be Simple And Fast》(swtch.com/~rsc/regex/),用详实基准测试复活了 Thompson 构造法,直接催生了 Google 2010 年开源的 RE2 引擎(线性时间、保证不发生指数回溯),以及后来 Rust 的 regex crate 等自动机派实现。这一路线之争是理解下文 ReDoS 风险的钥匙。

4. 事故现场:Cloudflare 全球宕机 27 分钟(2019-07-02)。 灾难性回溯不是教科书恐吓,而是真实的生产事故。2019 年 7 月 2 日,Cloudflare 的一台 Web 应用防火墙(WAF)在部署新规则时,一条用于检测恶意请求的正则在特定构造的请求上陷入灾难性回溯,CPU 被打满,导致全球范围内 Cloudflare 代理的所有站点宕机约 27 分钟。官方复盘(blog.cloudflare.com 上由 CTO John Graham-Cumming 署名的长文《Details of the Cloudflare Outage on July 2, 2019》)逐帧分析了回溯过程,并用 RE2 类思路给出了整改。据该复盘,涉事正则形如“多个 .* 级联”的模式——正是百秒视频里教观众使用的那个看似无害的 .*。这是本文最希望读者记住的一层:视频教的是 .* 能做什么,事故复盘讲的是 .* 能毁掉什么。

5. 语言的“方言”问题。 正则并没有全球统一标准:POSIX 基础/扩展正则(grep、sed)、PCRE 风格(Perl、PHP、多数现代语言库)、JavaScript/Python 各自的实现、Go(RE2 语法,不支持回溯型前瞻后顾的部分特性)……同一个模式在不同引擎上行为可能不同。视频用 JavaScript 演示的语法拿到 Go 里可能直接编译报错。这也是 regex101 这类工具支持切换“方言”的原因。

三、批判性审查:哪些主张站得住,哪些是善意的夸张

证据充分的部分。 正则的语法体系(字符集、量词、分组、锚点、断言)是形式语言理论中正则语言的标准记法,近八十年没有变动过,视频的每个演示都可在任何引擎上复现;.* 的回溯风险有 Cloudflare 复盘这样的工业级证据;“正则匹配时间可能指数爆炸”在回溯引擎上有严格的理论刻画。这些内容可以放心吸收。

善意夸张的部分。 标题里的"100 Seconds"是修辞。用认知负荷理论(John Sweller, 1988)的话说,这条视频完成的是组块化导览——它把正则的全部符号切成有序的组块告诉你“存在这些块、块与块怎么咬合”,但语言习得需要的是检索练习与间隔重复(《Make It Stick》的核心结论:流畅地“看懂”与能“提取使用”是两种记忆状态)。看完这条视频你获得的是一张地图,不是肌肉。把它当目录用,它的价值成立;把它当“我已学会”的凭证,价值立刻归零。

它没讲、但你必须知道的边界。

  1. 正则不是万能胶。 正则语言在乔姆斯基谱系里处于最弱的一级,不能表达“嵌套配对”这类上下文无关结构——所以“用正则解析 HTML”是流传最广的反面教材(Stack Overflow 上 2009 年那个"you can't parse HTML with regex"的高赞回答因此成为名梗)。校验一个“看起来像邮箱的字符串”正则可以胜任,验证一个邮箱真实可投递则只有发信才能证明——很多团队在注册表单上用正则把真实存在的地址(如含加号别名的新式地址)拦在门外,属于典型的工具误用。
  2. .* 是双刃剑。 前文已述:演示环节的宠儿,生产事故的主角。规则很简单——凡是.*与另一个.*或嵌套量词组合出现的模式,都要停下来想一秒。
  3. “两个问题”梗只对了一半。 Zawinski 的自嘲针对的是滥用,但 2020 年代出现了新变量:LLM 写正则的正确率显著高于写复杂业务逻辑的正确率,因为正则的规约(输入输出样例)可以被完整地放进上下文,且结果可以用穷举样例快速验证。AI 时代正则的“两个问题”体质在下降,“翻译官”体质在上升——这是这条老视频在今天被重新转发时新增的时代注脚。

四、认知提升与实用启示:三条可以本周执行的行动

1. 用“读正则”代替“背正则”,每周三十分钟。 打开你所在代码库,搜出三条真实存在的正则(日志、表单校验、路由里到处都是),逐条贴进 regex101,看着右侧解释面板逐符号读一遍,然后自己先预测它对五个样例的匹配结果再运行。读的能力建立后,写的难度会自动坍缩——因为写无非是把已知积木往句法槽位里填。坚持四周,你将超过团队里九成“见正则就绕行”的同事。

2. 把正则当“不可变的迷你依赖”来管理。 上生产前给每条正则上三道保险:一是锚定边界(能加 ^/$/\b 就加,能限定 {n,m} 就不写 *);二是限制输入长度(在调用正则前先做字符串长度检查,这是防 ReDoS 成本最低的一招);三是关键路径用线性引擎——日志管道、WAF、高并发入口这类位置优先考虑 RE2 或 Rust regex 系实现,从引擎层面让指数爆炸物理上不可能发生。Cloudflare 用 27 分钟全球宕机验证的教训,你用三行代码就能免疫。

3. AI 协作的新分工:机器写,你审计。 让 AI 生成正则时,永远附上输入输出样例对(尤其是你期待的反例),拿到结果后不要只测正例——把贪婪陷阱(<.*> vs <.*?>)、空输入、超长输入、Unicode 输入四类边界样例丢进 regex101 跑一遍。这套“生成—证伪”流程两分钟可完成,却覆盖了 AI 生成正则最常见的三类错误。在 AI 写代码的时代,读懂一段正则的能力,正在从“加分项”变成类似“看懂 SQL 执行计划”的基础审计素养。

延伸阅读

  1. Russ Cox《Regular Expression Matching Can Be Simple And Fast》(但非全部语言实现如此)系列文章 — swtch.com/~rsc/regex/ :理解两类引擎路线分歧与 ReDoS 根源的最佳技术读物,读完回看百秒视频里每一个量词都会有新的敬畏。
  2. Cloudflare 官方事故复盘《Details of the Cloudflare Outage on July 2, 2019》 — blog.cloudflare.com :一条正则放倒半个互联网的完整解剖,含逐步回溯图解。
  3. regex101.com — 在线正则调试器,支持多语言方言切换,本文建议一的所有练习都在这里完成。

(注:以上 URL 均为业界长期稳定的著名资源;因本轮会话联网受限未能逐一实时核验可访问性,若个别链接有变,按标题搜索即可。)

参考来源

  1. Fireship 频道主页 — 解读对象《Regex in 100 Seconds》所在频道,视频可在其 100 Seconds 播放列表中找到
  2. Russ Cox: Regular Expression Matching Can Be Simple And Fast — Thompson 构造法与现代正则引擎路线之争的奠基性技术文章
  3. Cloudflare: Details of the Cloudflare Outage on July 2, 2019 — 灾难性回溯导致全球宕机的官方复盘
  4. Ken Thompson, "Regular Expression Search Algorithm", Communications of the ACM, 1968 — 正则搜索的工程化起点(书目信息,无稳定公开 URL)
  5. Stephen Kleene, "Representation of Events in Nervous Nets and Finite Automata", 1956 — 正则表达式的数学起源(书目信息,无稳定公开 URL)

    本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入