/j|bu|oo/
抓住
- jefferson
- buchanan
- hoover
放过
- fremont
- dewey
- gore
xkcd 的正则高尔夫:第 1313 期漫画背后的谜题
xkcd 的正则高尔夫漫画如何开创了一种谜题类型,Peter Norvig 如何解开它,以及在哪里每天玩一道新的正则高尔夫谜题。
Regex Hunter阅读文章 /blog/ · 狩猎手记
/j|bu|oo/
抓住
放过
xkcd 的正则高尔夫漫画如何开创了一种谜题类型,Peter Norvig 如何解开它,以及在哪里每天玩一道新的正则高尔夫谜题。
Regex Hunter阅读文章 /^key=[^=]*$/
key=valuekey=key=42key=on·key=a=bkeyvaluek=v
一个 7 个字符的正则,在 30 个字符的输入上可能要跑好几秒,在 40 个字符的输入上可能要跑几个小时。本文讲解回溯的原理、(a+)+ 这类嵌套量词为什么会爆炸、它在 Stack Overflow 和 Cloudflare 引发的故障,以及让正则变安全的改写方法。
Regex Hunter/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/
Secret123aB3defghTr0ub4dor9Lives_cat·secret123SECRET123SecretpassAb1
如何用先行断言在一个正则表达式里检查“至少一个大写字母、一个数字、八个字符”,为什么不限顺序的写法离不开它们,常见正则里有哪些陷阱,以及为什么把每条规则分开检查往往是更好的设计。
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/^colou?r$/i
colorColourCOLORcolour·colrcoloursdiscolorkolor
每个 JavaScript 正则修饰符会改变什么,附可交互示例:忽略大小写 i、全局 g(以及 lastIndex 陷阱)、多行 m、dotAll s、Unicode u、粘性 y 和索引 d,还有 Python 中对应的写法。
Regex Hunter/^\d{5}$/
90210100010213960614·9021902100ZIP 9021090210-1234
^ 和 $ 匹配的不是字符,而是位置。为什么没有锚点的正则检查得比你想的少,m 修饰符改变了什么,Python 的 $ 如何对待末尾的换行符,以及什么时候该改用 \A 和 \z。
Regex Hunter/^[A-Z][a-z]+$/
ParisLimaOsloRome·parisPARISNew YorkR2D2
字符类是正则中最常用的部分,也最容易出现不易察觉的错误。本文讲解 [abc]、[a-z]、[^…]、\d、\w 和 \s 到底匹配什么,以及它们背后的陷阱:[A-z]、放错位置的连字符、方括号里的点,以及不是 0 到 9 的数字。
Regex Hunter今日棋盘已上线
抓住每个怪物,放过每个无辜者——字符越少越好。