正则测试器入门:语法与 flags

1. 把正则看成“文本模式语言”

正则表达式(Regular Expression)本质上是描述文本模式的一种语言。它不是只用来“查找”,还可以用于校验、替换、提取、分割。入门时你可以把它理解为“超级通配符”,但比文件通配符更精细:不仅可以匹配“有什么字符”,还能匹配“字符出现的位置、次数、前后关系”。在 JSONTOP 的正则测试器中,你写下规则后可以即时看到高亮结果,这正是把抽象规则转成可验证结果的最佳方式。学习正则最怕死记语法,最有效的方法是每学一个语法点就放进测试器验证一遍。

2. 入门必会:元字符、字符类、量词

你先掌握三组核心元素就足够了。第一组是元字符与字符类,例如 \d 表示数字、\w 表示字母数字下划线、[a-z] 表示小写字母区间、[^abc] 表示“非 abc”。第二组是边界符,例如 ^$ 表示开头和结尾、\b 表示单词边界。第三组是量词:* 是 0 次或多次,+ 是 1 次或多次,? 是 0 次或 1 次,{n,m} 表示出现次数范围。你在测试器里可以从最短规则开始,比如先写 \d+ 验证数字提取,再逐步加边界变成 ^\d+$ 做整行校验。

3. flags 的作用要配合场景理解

正则表达式右侧的修饰符(flags)会直接改变匹配行为。最常用是 g(全局匹配)、i(忽略大小写)、m(多行模式)、s(让点号匹配换行)、u(Unicode)。你在测试器里会明显看到差异:不加 g 往往只拿到第一个匹配;加 m 后,^$ 会针对每一行生效;加 s 后,. 才能跨行吞文本。实践建议是“最小 flags 原则”:默认只加你明确需要的标记,避免莫名其妙的匹配变化。

4. 运算符优先级与分组

很多误判来自优先级理解错误。正则从左到右计算,但存在优先级:转义、分组/字符类、量词、位置锚点,再到管道 |。例如 m|food 表示匹配 “m” 或 “food”;如果你想匹配 mood 或 food,应该写成 (m|f)ood。这也是为什么分组 () 很关键,它不仅用于捕获,也用于改变计算边界。建议在复杂规则里主动加分组,避免依赖“默认优先级猜测”。

5. 贪婪与非贪婪

默认情况下量词是贪婪的,会尽可能多地吞字符。比如在 HTML 文本里用 <.*> 可能一次跨多个标签。把量词改为非贪婪(在量词后加 ?),如 <.*?>,通常更符合“提取单个标签”的预期。你可以在测试器输入多段标签文本,分别测试贪婪与非贪婪写法,结果会非常直观。这个知识点在日志截取、模板清洗、文本抓取里非常常用。

6. 推荐的入门训练法

从业务问题反推规则,而不是反过来。先准备 10 条正样本和 10 条负样本,再写规则让它们都符合预期。每次修改只改一个因素(比如只改量词或只改边界),这样才能知道变化来源。最终把“规则 + flags + 样本”一起记录,未来复用时可以直接回归测试。你会发现正则并不神秘,它只是需要一套可验证、可迭代的方法论。