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

正则表达式需求:结尾必须带反斜杠,问号后可加单个可选短横线

正则表达式实现方案

我来帮你梳理需求并给出对应的实现方案,咱们先把核心规则拆解清楚,再对应到正则的写法上:

核心规则回顾

  • 允许的字符:大小写字母、数字、问号(?)、反斜杠(\),以及最多一个短横线(-)
  • 字符串必须以反斜杠结尾
  • 如果存在短横线,它只能出现在最后一个问号之后,且仅能出现一次

最终正则表达式

^(?:(?![^?]*-[^?]*\?)[-a-zA-Z0-9?\\]*)\\$

逐部分解释

咱们拆开来看每个部分的作用,方便你理解和调整:

  1. ^:匹配字符串的开头,确保验证从第一个字符开始,不会漏掉前置的非法内容
  2. (?: ... ):非捕获组,用来包裹整个前置内容(不生成额外的捕获组,避免不必要的内存占用)
  3. (?![^?]*-[^?]*\?):正向否定预查,这是实现“短横线只能在最后一个问号之后”的关键:
    • [^?]*:匹配任意数量的非问号字符
    • 整个预查的逻辑是:不允许出现“非问号字符 + 短横线 + 非问号字符 + 问号”的组合,换句话说,一旦出现短横线,后面就不能再有问号了,确保所有问号都在短横线之前
  4. [-a-zA-Z0-9?\\]*:匹配任意数量的允许字符:
    • [-a-zA-Z0-9?\\]:字符集合,包含短横线、大小写字母、数字、问号、反斜杠(注意反斜杠在正则里需要转义,所以写两个\\)
    • *:允许该字符集合出现0次或多次(支持空字符串加反斜杠的合法情况,比如\\)
  5. \\$:匹配字符串的结尾,强制要求最后一个字符是反斜杠(同样,反斜杠需要转义)

测试用例验证

合法示例

  • abc123\\(无问号无短横线,结尾反斜杠)
  • xyz?123\\(有问号无短横线)
  • abc?def-\\(短横线在最后一个问号之后)
  • -\\(仅短横线加反斜杠)
  • ?\\(仅问号加反斜杠)
  • a?b?c-456\\(多个问号,短横线在最后一个之后)

非法示例

  • abc-?def\\(短横线在问号之前)
  • abc--def\\(两个短横线)
  • abcdef(结尾无反斜杠)
  • abc?def-?\\(短横线之后出现问号)
  • abc\\-(结尾不是反斜杠)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:04:11