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

如何编写正则表达式判断整个字符串是否为占位符

如何判断整个字符串是否为单个占位符(支持嵌套)

需求说明

需要正则表达式判断整个字符串是否是单个合法占位符:

  • 有效占位符:${var}、${var-${nestedVar}}(支持嵌套)
  • 无效场景:占位符仅为字符串一部分,如${var}-sometext、${var1}-txt-${var2}

当前正则的问题

原正则^\$\{(.+)\}$存在缺陷:

  • 常规场景能正常匹配,但遇到${var1}-txt-${var2}时会错误匹配——因为.+是贪婪匹配,会直接匹配到最后一个},忽略中间的非占位符内容;若替换为[^$]+,又会无法识别嵌套占位符(因为嵌套里的$会被视为终止符)。

解决方案:递归匹配嵌套结构

Java正则支持通过平衡组递归实现嵌套结构的匹配,正确的正则如下:

public static final Pattern PATTERN = Pattern.compile("^\\$\\{(?:[^\\$\\}]|\\$\\{(?:(?1))\\})+\\}$");

正则逻辑拆解

  • ^ 和 $:严格匹配整个字符串,避免部分匹配
  • \$\{:匹配占位符起始标记${
  • (?:[^\\$\\}]|\\$\\{(?:(?1))\\})+:核心匹配规则(非捕获组,避免多余捕获)
    • [^\$\}]:匹配普通字符(非$和})
    • \$\{(?:(?1))\}:递归匹配内部嵌套的占位符结构((?1)引用当前组的匹配规则,实现嵌套识别)
    • +:确保占位符内部至少有有效内容
  • \}:匹配占位符结束标记}

测试验证

  • ${var}:匹配成功 ✅
  • ${var} txt:匹配失败 ✅
  • ${var-${nestedVar}}:匹配成功 ✅
  • ${var1}-txt-${var2}:匹配失败 ✅

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:45:43