/blog/ · 狩猎手记

Regex Hunter 博客

来自 Regex Hunter 的指南、正则策略和速查表:教你写出抓住每个目标、放过其余单词的正则,附实时示例。

/j|bu|oo/

抓住

  • jefferson
  • buchanan
  • hoover

放过

  • fremont
  • dewey
  • gore
精选正则高尔夫

xkcd 的正则高尔夫:第 1313 期漫画背后的谜题

xkcd 的正则高尔夫漫画如何开创了一种谜题类型,Peter Norvig 如何解开它,以及在哪里每天玩一道新的正则高尔夫谜题。

Regex Hunter 标志Regex Hunter阅读文章
其余 15 篇中的第 1–6 篇 · 总计 16 篇

/^key=[^=]*$/

key=valuekey=key=42key=on·key=a=bkeyvaluek=v

指南

灾难性回溯:正则表达式为什么会卡死

一个 7 个字符的正则,在 30 个字符的输入上可能要跑好几秒,在 40 个字符的输入上可能要跑几个小时。本文讲解回溯的原理、(a+)+ 这类嵌套量词为什么会爆炸、它在 Stack Overflow 和 Cloudflare 引发的故障,以及让正则变安全的改写方法。

Regex Hunter 标志Regex Hunter

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/

Secret123aB3defghTr0ub4dor9Lives_cat·secret123SECRET123SecretpassAb1

常用正则

用正则先行断言校验密码规则(以及何时不该这么做)

如何用先行断言在一个正则表达式里检查“至少一个大写字母、一个数字、八个字符”,为什么不限顺序的写法离不开它们,常见正则里有哪些陷阱,以及为什么把每条规则分开检查往往是更好的设计。

Regex Hunter 标志Regex Hunter

/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/

2026-10-131999-12-312000-01-012026-02-28·26-10-132026/10/132026-1-313-10-2026

指南

正则表达式中的命名组与非捕获组

括号有两项工作:分组和捕获。本文介绍非捕获组 (?:…) 如何只分组不捕获,命名组 (?<year>…) 如何让捕获内容更易读,如何用 \k<name> 引用它们,以及 Python 里的写法。

Regex Hunter 标志Regex Hunter

/^colou?r$/i

colorColourCOLORcolour·colrcoloursdiscolorkolor

指南

正则修饰符详解:i、g、m、s、u、y 和 d

每个 JavaScript 正则修饰符会改变什么,附可交互示例:忽略大小写 i、全局 g(以及 lastIndex 陷阱)、多行 m、dotAll s、Unicode u、粘性 y 和索引 d,还有 Python 中对应的写法。

Regex Hunter 标志Regex Hunter

/^\d{5}$/

90210100010213960614·9021902100ZIP 9021090210-1234

指南

正则锚点:^、$ 与多行模式详解

^ 和 $ 匹配的不是字符,而是位置。为什么没有锚点的正则检查得比你想的少,m 修饰符改变了什么,Python 的 $ 如何对待末尾的换行符,以及什么时候该改用 \A 和 \z。

Regex Hunter 标志Regex Hunter

/^[A-Z][a-z]+$/

ParisLimaOsloRome·parisPARISNew YorkR2D2

指南

正则表达式字符类:\d、\w、\s、[a-z] 及其陷阱

字符类是正则中最常用的部分,也最容易出现不易察觉的错误。本文讲解 [abc]、[a-z]、[^…]、\d、\w 和 \s 到底匹配什么,以及它们背后的陷阱:[A-z]、放错位置的连字符、方括号里的点,以及不是 0 到 9 的数字。

Regex Hunter 标志Regex Hunter

今日棋盘已上线

学会了技巧,现在去狩猎吧。

抓住每个怪物,放过每个无辜者——字符越少越好。