跳到正文

正则表达式

Regex

中级通用

正则表达式(Regex)是一种用模式描述文本特征的方法,能查找、提取或判断字符串是否符合指定形式。比如网站要求订单号由两个大写字母、一个连字符和四位数字组成,就可以用正则表达式检查格式。

你可能会说:「我想让订单号只能是两个大写字母、一个横杠和四位数字,其他输入都提示格式不对。」

读之前建议先了解

动手看看

匹配到 2 处

你好,我的订单 #2024-0518 还没发货,另一个 #2024-0602 已经收到了。电话 138-0000-0000 不是订单号。

捕获分组

#2024-0518 → $1: 2024$2: 0518
#2024-0602 → $1: 2024$2: 0602

正则是一段「描述文字长什么样」的规则:这里写的是「# 后面跟 4 位数字、短横线、再 4 位数字」,所以电话号码不会被误认成订单号。

括号会把匹配到的一部分单独取出来(捕获分组):$1 是年份、$2 是编号。试试把 \d{4} 改成 \d+,看看会多匹配到什么。

关掉 g(全部匹配),只会找到第一个订单号;写错括号时下方会直接显示错误原因。

要点

  1. 1

    把固定内容和变化位置组合起来

    你可以把模式理解成文本的形状:连字符照原样写,字母和数字的位置用规则表示,再写明各自出现几次。这样一个模式就能覆盖许多不同的订单号,不用逐个列出。

  2. 2

    区分找到片段和检查整体

    正则表达式默认可能只找到输入中的一段匹配内容。因为订单号校验要检查整个输入,所以还要限定从开头到结尾都符合模式;否则前后多出字符,也可能被误判为通过。

  3. 3

    把规则范围和测试样例说清

    同一种格式可能有不同解释,比如“大写字母”是否只指英文字母。你和 AI 协作时,把允许的字符、长度,以及该通过和不该通过的样例一起给出,更容易发现规则写偏了。

容易混淆的地方

正则表达式描述的是文本形式,不等于完整的数据校验。它能判断订单号看起来是否符合格式,却不能证明订单存在、没有重复或属于当前用户;这些还要查业务数据。它也不只是普通的文本搜索:普通搜索找固定字词,正则表达式还能描述一类会变化的文本。

什么时候用

适合用

  • 网站表单要检查用户填写的兑换码,格式固定,但每个兑换码的字符不同。
  • 后台导入一批记录时,要从说明文字中找出符合约定格式的工单编号。
  • 编辑器里要批量定位某类旧字段名,先预览匹配结果,再进行替换。

不适合用

  • 要判断兑换码是否真实、是否已使用时,格式匹配不够,改查数据库和使用记录。
  • 要读取有明确字段的 JSON 响应时,直接解析 JSON,比从原始文本里用正则抓字段可靠。
  • 用户只是从几个固定状态中选一个时,用选项列表和枚举值判断,不必分析文本模式。

练一练

你在做售后后台,工单号规定为两个英文字母大写、一个连字符、四位数字。AI 要实现输入校验,哪种方案最贴合需求?

让 AI 帮你做

请为售后后台的工单号输入编写正则表达式校验:完整输入只能是两个大写英文字母、一个连字符、四位数字。请同时提供通过和不通过的测试用例;格式校验与工单是否存在的查询分开实现。

接下来学什么