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

Go语言正则表达式禁止连续连字符的实现方案求助

解决Go语言中无连续连字符的正则匹配问题

因为Go语言标准库的正则表达式不支持负前瞻,所以我们需要用正向匹配的思路构造正则,避免出现连续的--。

场景1:允许所有字符(仅排除连续--)

如果你的需求是允许任意字符,只要不包含连续连字符,可以使用以下正则:

^-?(?:[^-]+-?)*$

规则解释:

  • ^ 匹配字符串起始位置
  • -? 允许字符串以单个连字符开头(可选)
  • (?:[^-]+-?)* 重复匹配「一个或多个非连字符 + 可选单个连字符」的组合,确保每次出现的连字符都是单独的,不会形成连续的--
  • $ 匹配字符串结束位置

如果需要排除空字符串,同时允许单个连字符,可以调整为:

^-?$|^(?:-?[^-]+-?)+$

场景2:保持原正则的字符范围(仅允许字母、-、'、空格)

你的原正则^[a-z]+(?:[-'\s][a-zA-Z]+)*$本身已经不会出现连续的--(因为每个分隔符后必须跟字母,无法连续出现分隔符)。如果需要放宽限制,允许分隔符后跟随任意允许的字符(而非仅字母),同时仍避免连续--,可以使用:

^[a-z]+(?:(?:['\s][a-zA-Z'\s]+|-[a-zA-Z'\s]+))*$

规则解释:

  • 将分隔逻辑拆分为两种情况:
    1. ['\s][a-zA-Z'\s]+:单引号或空格后跟随至少一个允许的字符(字母、单引号、空格)
    2. -[a-zA-Z'\s]+:连字符后跟随至少一个非连字符的允许字符,确保不会出现连续的--
  • 整体保持以小写字母开头的规则,和原正则的核心结构一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:20:28