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

如何设计正则表达式:仅在相邻可选有序分组间允许分隔符?

正则表达式匹配有序可选分段解决方案

需求回顾

需要匹配由分隔符:分隔的4个有序部分(对应示例中的A、B、C、D),规则如下:

  • 所有部分可选,但至少存在一个部分
  • 分隔符仅能出现在相邻有效部分之间
  • 禁止以下无效内容:以:开头/结尾、连续:、部分逆序(如B:A)、部分重复(如A:A)、无分隔符的拼接(如ABC)

简洁正则表达式方案

针对需求,可使用带正向预查的正则表达式,既避免手动枚举所有有效组合,又能严格过滤无效内容:

^(?!.*(A.*A|B.*B|C.*C|D.*D))(?!.*(B.*A|C.*(A|B)|D.*(A|B|C)))(?!:)(?!.*::)(?!.*:$)(?:A|B|C|D)(?::(?:A|B|C|D))*$

表达式拆解

  • (?!.*(A.*A|B.*B|C.*C|D.*D)):禁止任何部分重复出现
  • (?!.*(B.*A|C.*(A|B)|D.*(A|B|C))):强制部分顺序(A只能在B/C/D前,B只能在C/D前,C只能在D前)
  • (?!:):排除以:开头的字符串
  • (?!.*::):排除包含连续:的字符串
  • (?!.*:$):排除以:结尾的字符串
  • (?:A|B|C|D)(?::(?:A|B|C|D))*:匹配一个或多个用:分隔的有效部分

适配实际场景

如果A、B、C、D的实际匹配规则更复杂(比如是特定格式的字符串),只需将表达式中对应的A/B/C/D替换为各自的正则模式即可,整体结构无需改动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:52:39