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

如何使占位符<value>不干扰正则表达式匹配(含复杂场景)

骰子表达式正则适配占位符需求

我有一套用于匹配骰子表达式的正则规则,示例正则^\d*d\d*([+-]\d+)?$可匹配2d20+1、d+7这类格式。现需修改正则,使得在字符串任意位置插入占位符(格式为<xxx>,支持带下划线的变体如<value_1>、<abs_1>)后,仍能被修改后的正则匹配,无需提前替换占位符为空,用于JSON Schema的字符串有效性验证。注意不能用.*匹配任意内容,仅需保证占位符本身不干扰原表达式的匹配逻辑,例如6d3<value>6-<value>4这类字符串应当能被匹配。

简单正则场景

原正则:

^\d*d\d*([+-]\d+)?$

测试用例:

  • "" → 不匹配
  • "<value>d<value>2<value>0+<value>" → 应匹配(当前不匹配)
  • "2d20+1" → 匹配
  • "2d<value>+1" → 应匹配(当前不匹配)
  • "<value>d10+1" → 应匹配(当前不匹配)
  • "d" → 匹配
  • "d<value>" → 应匹配(当前不匹配)

实际复杂正则场景

原正则:

^[+-]?(?:\([+-]?)*(?:(?:\d*d\d*(?:(?:km(?![^d]*(?:e|km))|k(?![^d]*(?:e|k(?:[^m]|$)))|ei(?![^d]*(?:ei|k))|e(?![^d]*(?:e(?:[^i]|$)|k))|(([<>])\2)(?![^d]*\1)|([+\-*\/%])\3)\d*)*|\d+|f\d*)\)*(?:$|[+\-*\/%](?=[\ddf(]))(?:\([+-]?)*)+$

测试用例:

  • "" → 不匹配
  • "d20+5" → 匹配
  • "d20+f5+4d10k5+5d20km10k5" → 匹配
  • "d20++5/f5+f-4d10k5--5+5d20ei10" → 匹配
  • "<value_1>d20++<value_2>-<abs_1>*<math_<abs_1>-2>" → 应匹配(当前不匹配)
  • "1<value_1>d20**2<value_2>-<abs_1>*<math_<value_10>-2>" → 应匹配(当前不匹配)
  • "1d20e<value_1>i10-1d20ek<value_1>m10" → 应匹配(当前不匹配)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:34:51