<!-- title: 一百秒的正则，六十年恩怨史 -->
<!-- domain: programming -->

## 概述：为什么是这条视频

如果你只能看一条讲正则表达式的视频，那大概率应该是它——Fireship 频道的《Regex in 100 Seconds》（100 秒学会正则表达式）。这条两分钟不到的小课，是程序员社区里被转传最广的正则入门材料之一，也是“100 秒系列”里长盛不衰的一期。它把正则的语法骨架在一口气里讲完，但真正值得深挖的，是它没时间讲的那部分：正则背后六十多年的理论恩怨、两种引擎的路线之争，以及一条写坏的正则如何在 2019 年放倒半个互联网。本文带你把这条视频“看完”，并且多懂一层。

## 视频基本信息

| 项目 | 内容 |
|------|------|
| 视频标题 | Regex in 100 Seconds（100 秒学会正则表达式） |
| 频道 | Fireship（主理人 Jeff Delaney） |
| 所属系列 | "X in 100 Seconds" 快速入门系列 |
| 上线时间 | 2020 年（据频道页面） |
| 播放量 | 累计约数百万次（据频道页面，以实时数据为准） |
| 时长 | 约 2 分钟 |

> 注：以上数据据频道页面，播放量随时间持续增长，请以 YouTube 页面实时显示为准。

## 视频讲了什么：100 秒走完的语法地图

按叙事顺序，这条视频其实只做了一件事：把正则表达式的“积木盒”打开，让你看见里面有几块积木。

**第一块：正则是“模式即程序”。** 视频开宗明义——正则表达式（Regular Expression，简称 regex）是一串字符构成的搜索模式，你写下一段式子，它就能在文本里替你找到、验证、替换所有符合条件的内容。这是全片的核心心智模型：正则不是字符串匹配的捷径，而是一种极小型的声明式编程语言。你写的不是“找到 abc 这个词”，而是“找到所有满足这个结构的片段”。

**第二块：语法积木四件套。** 视频快速过了一遍正则的字母表：字符集与区间（`[abc]`、`[0-9]`、`[^…]` 取反），元字符缩写（`\d` 数字、`\w` 单词字符、`\s` 空白），量词（`*` 零个及以上、`+` 一个及以上、`?` 可选、`{n,m}` 指定次数），以及锚点与分组（`^` 开头、`$` 结尾、`()` 捕获组）。最后还有全局/忽略大小写等标志位。这四件套构成了 95% 日常正则的全部词汇量。

**第三块：实战一条龙。** 视频的收尾是用这些积木现场拼一条邮箱验证正则——从匹配字面前缀，到 `@`，到域名结构，一步步把模式“长”出来。这一段的价值不在邮箱本身，而在于演示了正则的思考方式：把一个文本结构翻译成一棵模式树。

**第四块：留白的敬畏感。** 视频结尾几乎必然要提一句：正则以难读、难维护著称。这句话被无数弹幕会心一笑地刷过，但它其实是整条视频最有信息量的注脚——也是本文后面要展开的主线。

## 知识与理论溯源：这段语法从哪来

视频没时间讲的，是这条知识链的纵深。正则的每一段语法背后，都站着真实的人和工程史。

**起点是神经元，不是计算机。** 1943 年，神经生理学家沃伦·麦卡洛克（Warren McCulloch）与逻辑学家沃尔特·皮茨（Walter Pitts）发表论文《神经活动内在思想的逻辑演算》，用数学描述神经元如何组成网络处理事件。1956 年，数学家斯蒂芬·科尔·克林（Stephen Cole Kleene）在论文《神经网络的表示与自动机》中，把这类网络的能力抽象成一种代数——这就是“正则表达式”的数学起源。也就是说，正则天生是“用小符号描述大结构”的理论工具。

**肯·汤普森把它塞进了编辑器。** 1960 年代末，贝尔实验室的肯·汤普森（Ken Thompson，1983 年图灵奖得主）把正则实现进 QED 编辑器，随后是 ed。1968 年他在《ACM 通信》发表论文《正则表达式搜索算法》，思路激进到今天看仍属炫技：把正则直接编译成机器码来执行。后来 Unix 上的 grep，名字就是 ed 命令 `g/re/p`（全局搜索正则并打印）的缩写——你在终端敲下的每一次 grep，都是在给 1968 年的贝尔实验室续费。

**两条路线的分裂。** 汤普森当年的实现走的是有限自动机（finite automata）路线：把模式编译成状态机，匹配时间与文本长度成线性关系，永不失控。但 1980 年代 Perl 兴起后，为了支持反向引用、环视这些自动机难以表达的特性，主流实现转向了“回溯”（backtracking）引擎：匹配失败就退回去换条路再试。Henry Spencer 1986 年的 C 语言正则库、后来的 PCRE（Perl Compatible Regular Expressions，被 Apache、PHP、Nginx 等广泛采用）都属于这条线。今天 JavaScript、Python、Java 的内置正则，也几乎全是回溯引擎。回溯换来了表达力，代价后面再谈。

**现代的反攻。** 2007 年前后，Google 工程师 Russ Cox 发表系列文章《正则匹配可以又简单又快》，系统指出主流语言的正则引擎放弃了理论保证、性能可以差出几个数量级。Google 随后开源了线性时间的 RE2 引擎；Andrew Gallant 开发的 Rust regex 库（ripgrep 的内核）同样走自动机路线，配合字面量预过滤等工程优化，成为“既快又安全”的现代范本。

**那句著名毒舌。** 1997 年，程序员杰米·加温斯基（Jamie Zawinski）在新闻组里写道：“有些人遇到问题时会想‘我知道，我用正则吧’。现在他们有两个问题了。”这句话流传了近三十年，本意不是骂正则，而是提醒：正则是为“文本模式”设计的，不是为“结构解析”设计的。

## 批判性审查：哪些可信，哪些要打折

**证据充分的部分：** 正则的理论根基（克林代数、自动机理论）是计算理论的标准内容；它在文本处理中的工程地位有六十余年历史背书；视频演示的语法四件套属于各家方言（JS/Python/PCRE）中高度通用的公共子集，作为入门没有问题。

**要打折的部分有三处。**

第一，“100 秒学会”是系列营销话术。100 秒能学会的是语法词汇表，而不是写正则的能力。正则的真正难点在于组合爆炸：每块积木都简单，拼起来却极易出错、极难调试。看懂 `\w+@\w+\.\w+` 和能在生产代码里写出可维护的正则，中间隔着无数个凌晨。

第二，视频没讲的暗雷：灾难性回溯（catastrophic backtracking，业界称 ReDoS）。回溯引擎遇到嵌套量词（如 `(a+)+$`）配上一段精心或无意构造的文本，匹配步数会指数级爆炸——文本长一点，就要算到宇宙热寂。这不是理论担忧：2019 年 7 月 2 日，Cloudflare 一条 Web 应用防火墙规则里形如 `.*.*=.*!` 的正则在边缘节点触发灾难性回溯，CPU 被打满，全球大量网站集体 502，约半小时后才恢复（据 Cloudflare 官方复盘博客）。事后 Cloudflare 表示要逐步把 WAF 迁往不回溯的 Rust 正则实现。一条正则放倒半个互联网，这在其他语言特性里几乎找不到对标案例。

第三，邮箱正则的“完备性骗局”。视频演示的简化版邮箱正则能过大多数演示场景，但如果要完整符合 RFC 822/5322 邮箱语法的正则，流传版本长达数千字符。更根本的限制来自乔姆斯基层级：正则只能描述“正则语言”，无法处理任意深度的嵌套结构——所以“用正则解析 HTML/JSON”注定是错误路线，那需要真正的解析器。Zawinski 那句话的完整含义就在这里。

## 认知提升：三条可以带走的规则

**规则一：动手前先问“这是不是正则语言”。** 目标文本是平铺的模式（日志行、编号、日期、URL 片段），正则是利器；目标是嵌套结构（HTML 标签、JSON、代码块），直接放弃正则，去写解析器或用现成库。这一问能拦住 80% 的正则事故。

**规则二：把正则当代码写，而不是当咒语贴。** 用 regex101 这类可视化调试工具构建和验证；用扩展模式（verbose mode）给长正则加注释和换行；为核心正则写单元测试，包括边界输入。一条出现在代码评审里的正则，应该能像函数一样被读懂、被测试、被重构。

**规则三：守住性能与安全红线。** 写量词时警惕嵌套（`(\w+)+`、`(.*)*` 是经典毒药）；对不可信输入做长度上限；在安全敏感或高并发路径上，优先选择不回溯的线性引擎（RE2、Rust regex 系）。做代码安全审计时，把每个对外部输入运行的正则都视为潜在攻击面。

## 一张图看懂这条视频的知识结构

```mermaid
flowchart TD
    A[Fireship 正则100秒] --> B[模式即程序]
    B --> C[语法积木四件套]
    C --> C1[字符集与元字符]
    C --> C2[量词]
    C --> C3[锚点分组与标志]
    B --> D[理论源头]
    D --> D1[1943神经元模型]
    D --> D2[1956克林代数]
    D --> D3[1968汤普森编译正则]
    B --> E[引擎两条路线]
    E --> E1[回溯引擎<br/>Perl PCRE JS]
    E --> E2[自动机引擎<br/>RE2 ripgrep]
    E1 --> F[灾难性回溯 ReDoS]
    F --> G[2019 Cloudflare全球宕机]
    E2 --> H[线性时间有保证]
    G --> I[三条实践守则]
    H --> I
    I --> I1[先判断是否正则语言]
    I --> I2[正则当代码写]
    I --> I3[关键路径避开回溯]
```

## 延伸阅读

1. Russ Cox《Regular Expression Matching Can Be Simple And Fast》系列 — 现代正则引擎路线之争的最佳长文，读完你会重新审视所有语言的内置正则。
2. regular-expressions.info（Jan Goyvaerts 维护）— 最系统的正则语法参考站，各方言差异一查便知。

## 参考来源

1. [Fireship 频道页](https://www.youtube.com/@Fireship) — 《Regex in 100 Seconds》所在频道，可在频道搜索栏检索该视频
2. [Regular Expression Matching Can Be Simple And Fast — Russ Cox](https://swtch.com/~rsc/regexp/regexp1.html) — 回溯引擎与自动机引擎路线之争的源头文章
3. [Regular expression — Wikipedia](https://en.wikipedia.org/wiki/Regular_expression) — 正则从克林到汤普森的历史与理论脉络
4. [ReDoS — Wikipedia](https://en.wikipedia.org/wiki/ReDoS) — 灾难性回溯攻击的定义、案例与防御
5. [Details of the Cloudflare outage on July 2, 2019 — Cloudflare Blog](https://blog.cloudflare.com/details-of-the-cloudflare-outage-on-july-2-2019/) — 一条正则放倒全球网络的官方复盘

---
> 本文由「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学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
