You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式校验需求:确保{}内元素无空值且由|分隔

正则表达式解决方案:校验无空元素的花括号分隔格式

嘿,我来帮你搞定这个正则校验的问题!你的核心需求很明确:要匹配{元素1|元素2|...|元素n}这种格式,要求每个元素都是[A-Z0-9-_.*](我猜你原正则里的0-1是笔误,应该是0-9?如果确实只允许0和1,改回01就行)范围内的字符,绝对不能有空元素——不管是首尾的|,还是中间连续的|都不行,同时还要支持单个元素的情况(比如{A})。

最终可用的正则表达式

^\{([A-Z0-9-_.*]+(?:\|[A-Z0-9-_.*]+)*)\}$

如果不需要捕获花括号内的内容,把捕获组改成非捕获组即可:

^\{(?:[A-Z0-9-_.*]+(?:\|[A-Z0-9-_.*]+)*)\}$

正则拆解(帮你理解每一部分的作用)

  • ^ 和 $:锚定整个字符串,确保输入完全符合格式,不会出现部分匹配的情况(比如不会把xxx{A}xxx当成合法输入)
  • \{ 和 \}:匹配字面量的{和},因为这两个是正则的特殊元字符,必须转义才能匹配本身
  • 核心匹配部分[A-Z0-9-_.*]+(?:\|[A-Z0-9-_.*]+)*:
    • [A-Z0-9-_.*]+:匹配至少一个合法字符,保证单个元素非空
    • (?:\|[A-Z0-9-_.*]+)*:这是一个非捕获组,允许0次或多次重复|+合法元素的结构。*的作用很关键:当只有单个元素时,这部分完全不匹配,刚好满足{A}的场景;当有多个元素时,每次重复都会确保|后面跟着非空的合法元素,从根源上杜绝了空元素的出现。

你的原正则问题出在哪?

你之前用的正则(?: ( \{{1} (?:[A-Z0-1-_.*]+ \| [A-Z0-1-_.*]+)* \}{1} ) )有两个致命问题:

  1. 内部的(?:[A-Z0-1-_.*]+ \| [A-Z0-1-_.*]+)*要求每次匹配都是「元素|元素」的结构,这就导致至少需要两个元素才能匹配,自然无法识别单个元素的{A}
  2. 虽然原正则不会匹配首尾带|的情况,但核心逻辑限制了元素数量,这是最主要的问题

测试用例参考

  • ✅ 合法输入(会被匹配):
    • {A}
    • {A|B}
    • {A-B.*9|Z_0}
  • ❌ 非法输入(会被拒绝):
    • {A|}(末尾空元素)
    • {|B}(开头空元素)
    • {A||B}(中间空元素)
    • {}(空内容)
    • A|B(缺少花括号包裹)
    • {a}(小写字母不在合法范围)

内容的提问来源于stack exchange,提问作者Olli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:42:25