在 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 编程话题回流,正符合“经典内容再发现”的解读价值。
这条视频的秘密不在于信息量大,而在于信息密度被压缩到了一个精心设计的临界点:每一秒都在给观众一个新的“积木”,且每块积木都能立刻用一个直观例子验证。按视频的叙事顺序,它的内容可以拆成五层。
视频开场用一句话把正则重新定义:它是一种用极少的字符描述一大类字符串模式的方式——你写下的不是一堆匹配规则,而是一个“程序的程序”。演示用的例子是经典的场景:从一段文本里找出所有符合某种模式的片段(比如匹配一段日期、一串数字或一个邮箱形状的东西),用 JavaScript 的 match 方法一行完成,而等价的命令式写法需要十几个字符判断加循环。
这一层的认知价值经常被低估。多数初学者怕正则,不是因为符号难,而是因为把它当成需要背诵的符号表。视频把它重新框定为“语言”——有字母(字面量)、有词汇(字符类)、有语法(量词、分组)、有语义(捕获与替换)——学习的心理负担立刻从“死记”变成“理解后组合”。这个框定是对的,而且有理论依据:正则表达式在形式语言理论里本来就是“正则语言”的描述工具,与有限自动机一一对应(下文溯源部分展开)。
视频的第二步是搭积木的地基:
cat 就匹配 "cat" 本身,正则的最平凡情形;[abc] 匹配 "a"、"b"、"c" 中任意一个;[a-z]、[0-9] 把"某一类字符"压缩成三个符号;[^abc] 匹配"除了 a、b、c 之外的任意字符”,尖括号在方括号内的语义反转,是新手第一个“咦?”的瞬间;\d(数字)、\w(字母数字下划线)、\s(空白符),以及对应的大写形式 \D \W \S 取反;.:匹配除换行外任意字符的“通配符”。接下来视频进入量词(quantifiers),这是正则从“字符匹配”升级为“模式匹配”的关键一步:
*:前一个元素出现 0 次或多次;+:出现 1 次或多次;?:出现 0 次或 1 次(可选);{2,4}:出现 2 到 4 次——精确到数字的表达力。视频用一个组合例子展示了积木的威力:\d{3}-\d{4} 之类的一小串符号就能匹配一个电话号码形状的字符串。正则的“一行顶二十行”就发生在这一层:量词把“重复”这个命令式语言里最啰嗦的结构(循环)压缩成了一个符号。
这里有一个视频受时长所限只可能一笔带过、却极其重要的知识点:贪婪与懒惰。默认情况下量词是贪婪的——<.*> 在匹配 "<a><b>" 时会一口气吞掉整个字符串,因为它“能吃多少吃多少”;而懒惰版本 <.*?> 会在第一个 > 处停下,得到 "<a>"。生产环境里大量“正则匹配得太宽”的 bug 都源于此。百秒课没时间讲,本文替它补上。
视频的后半段给了三样让正则从“匹配”变成“可编程”的武器:
( ) 把模式的一部分打包,引擎会把匹配到的子串存成捕获组,替换时用 $1、$2 引用——这是“查找替换”类操作的灵魂,也是编辑器、IDE、sed 里最常用的能力;^ 锚定行首,$ 锚定行尾,\b 是单词边界——锚点不消耗字符,只声明“位置”,这是新手最容易忽略的“零宽断言”概念;(?=...) 表示“后面必须跟着什么但不用它参与匹配”,百秒版用它演示了一个典型技巧(如密码强度校验:“这个位置后面必须存在一个数字”)。视频结尾推荐了在线调试工具(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. 用“读正则”代替“背正则”,每周三十分钟。 打开你所在代码库,搜出三条真实存在的正则(日志、表单校验、路由里到处都是),逐条贴进 regex101,看着右侧解释面板逐符号读一遍,然后自己先预测它对五个样例的匹配结果再运行。读的能力建立后,写的难度会自动坍缩——因为写无非是把已知积木往句法槽位里填。坚持四周,你将超过团队里九成“见正则就绕行”的同事。
2. 把正则当“不可变的迷你依赖”来管理。 上生产前给每条正则上三道保险:一是锚定边界(能加 ^/$/\b 就加,能限定 {n,m} 就不写 *);二是限制输入长度(在调用正则前先做字符串长度检查,这是防 ReDoS 成本最低的一招);三是关键路径用线性引擎——日志管道、WAF、高并发入口这类位置优先考虑 RE2 或 Rust regex 系实现,从引擎层面让指数爆炸物理上不可能发生。Cloudflare 用 27 分钟全球宕机验证的教训,你用三行代码就能免疫。
3. AI 协作的新分工:机器写,你审计。 让 AI 生成正则时,永远附上输入输出样例对(尤其是你期待的反例),拿到结果后不要只测正例——把贪婪陷阱(<.*> vs <.*?>)、空输入、超长输入、Unicode 输入四类边界样例丢进 regex101 跑一遍。这套“生成—证伪”流程两分钟可完成,却覆盖了 AI 生成正则最常见的三类错误。在 AI 写代码的时代,读懂一段正则的能力,正在从“加分项”变成类似“看懂 SQL 执行计划”的基础审计素养。
(注:以上 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 等场景全覆盖。
