TextKit
← 返回博客

正则表达式入门:Regex 测试完全指南

· TextKit
正则表达式文本处理编程技巧

正则表达式(Regular Expression,简称 Regex)是文本处理的瑞士军刀。从验证表单输入到搜索日志文件,从提取数据到批量替换,正则表达式用简洁的语法完成复杂的文本匹配任务。但它的语法也以”难以阅读”著称——有人戏称正则表达式是”只写语言”。这篇指南将帮助你从零开始理解正则表达式,并学会高效地测试和调试。

正则表达式基础

正则表达式本质上是一种描述文本模式的小型语言。你用特定的语法定义一个模式,正则引擎在目标文本中搜索匹配该模式的内容。

元字符

元字符是正则表达式中具有特殊含义的字符。要匹配元字符本身,需要用反斜杠转义。

  • . — 匹配除换行符外的任意字符
  • \d — 匹配数字,等价于 [0-9]
  • \w — 匹配字母、数字或下划线,等价于 [a-zA-Z0-9_]
  • \s — 匹配空白字符(空格、制表符、换行等)
  • ^ — 匹配字符串开头
  • $ — 匹配字符串结尾
  • \b — 匹配单词边界

对应的大写版本表示取反:\D 匹配非数字,\W 匹配非单词字符,\S 匹配非空白字符。

量词

量词指定前一个元素重复的次数:

  • * — 0 次或多次(如 go* 匹配 “g”、“go”、“goo”)
  • + — 1 次或多次(如 go+ 匹配 “go”、“goo”,不匹配 “g”)
  • ? — 0 次或 1 次(如 colou?r 同时匹配 “color” 和 “colour”)
  • {n} — 恰好 n 次
  • {n,} — 至少 n 次
  • {n,m} — n 到 m 次

量词默认是贪婪的——会尽可能多地匹配。在量词后加 ? 变为懒惰模式,尽可能少地匹配。例如 a.*b 在 “a1b2b3b” 中匹配 “a1b2b3b”,而 a.*?b 只匹配 “a1b”。

分组和捕获

  • (abc) — 捕获组,匹配 “abc” 并记住匹配内容
  • (?:abc) — 非捕获组,匹配但不记住
  • a|b — 或,匹配 “a” 或 “b”
  • [abc] — 字符类,匹配 “a”、“b” 或 “c” 中的任一个
  • [^abc] — 否定字符类,匹配除 “a”、“b”、“c” 外的任一字符

捕获组的内容可以通过反向引用在表达式中使用:\1 引用第一个捕获组,\2 引用第二个,以此类推。

常见匹配模式

邮箱地址

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

这个模式匹配大多数常见邮箱格式。注意:完整的 RFC 5322 邮箱验证正则极其复杂,实际开发中通常用简化版本配合后端验证。

URL

https?:\/\/[\w\-]+(\.[\w\-]+)+[/#?]?.*

匹配以 http:// 或 https:// 开头的 URL。对于严格的 URL 解析,建议使用编程语言内置的 URL 解析库。

手机号码(中国大陆)

^1[3-9]\d{9}$

匹配以 1 开头、第二位为 3-9、共 11 位数字的中国大陆手机号。

身份证号(18 位)

^\d{17}[\dXx]$

匹配 18 位身份证号,最后一位可能是数字或 X。

标志位

正则表达式的标志位改变匹配的行为:

  • g(全局):查找所有匹配,而非在第一个匹配后停止
  • i(忽略大小写):不区分大小写匹配
  • m(多行):使 ^$ 匹配每行的开头和结尾,而非整个字符串
  • s(点号匹配换行):使 . 匹配包括换行符在内的所有字符

标志位可以组合使用。例如 /pattern/gi 同时启用全局和忽略大小写。

正则测试策略

写正则表达式时,最常见的问题是”看起来对但实际不匹配”或”匹配了不该匹配的内容”。以下是高效测试的方法:

从简单开始

不要一开始就写完整的复杂模式。先匹配最核心的部分,确认有效后再逐步添加约束。例如验证邮箱时,先确保能匹配 @,再加前缀和域名规则。

测试边界情况

  • 空字符串
  • 刚好满足和不满足条件的输入
  • 包含特殊字符的输入
  • 超长输入

使用可视化工具

正则表达式的可读性很差。使用可视化工具将正则表达式渲染为铁路图,可以直观理解匹配逻辑。测试工具通常会高亮匹配的部分,让你立即看到哪些文本被匹配。

注意性能

某些正则表达式可能导致灾难性回溯(ReDoS)。例如 (a+)+b 在不匹配的长字符串上会导致指数级的时间消耗。避免嵌套量词和重叠的替代分支。

使用 TextKit 的正则测试工具

TextKit 提供免费的 正则测试工具,让测试正则表达式变得简单:

  1. 在正则表达式输入框中输入你的模式
  2. 在测试文本区域输入待匹配的文本
  3. 工具实时高亮所有匹配结果
  4. 支持切换标志位(g、i、m)
  5. 显示捕获组内容
  6. 一键复制正则表达式

所有匹配过程在浏览器中完成,无需安装任何软件。

正则表达式学习建议

  • 从实际需求出发:不要试图一次学完所有语法,遇到具体问题时学习对应的语法。
  • 多写多测:正则表达式是技能,不是知识。只有通过反复练习才能熟练。
  • 添加注释:在复杂正则中使用 (?#注释) 或拆分为多行,帮助未来的自己理解。
  • 知道何时不用正则:有些任务用字符串方法更简单清晰。正则不是万能的。

准备好测试你的正则表达式了吗?试试 TextKit 免费的 正则测试工具——输入模式,实时查看匹配结果。