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

正则表达式匹配嵌套方括号内内容问题求助

解决嵌套方括号的正则提取问题

你的原正则(?<inside_value>(?<=\[).*?\[?(?=\]))核心问题在于:非贪婪匹配.*?会在遇到第一个]时就终止匹配,无法处理内部嵌套[]的场景。

修正方案(支持递归正则的环境)

如果你的开发环境支持PCRE递归正则(比如Python的regex库、PHP、Perl等),可以使用以下正则正确提取嵌套方括号内的内容:

(?<inside_value>(?<=\[)(?:[^[\]]|(?&inside_value))*(?=\]))

正则逻辑说明:

  • (?<=\[):正向预查,确保匹配位置紧跟在左方括号[之后
  • (?:[^[\]]|(?&inside_value))*:非捕获组,循环匹配两种内容:
    • [^[\]]:任意不是[或]的普通字符
    • (?&inside_value):递归调用当前命名组,处理嵌套的方括号结构
  • (?=\]):正向预查,确保匹配位置紧跟在右方括号]之前

测试验证

将修正后的正则应用到你的示例:

  • 示例A:[ClusterReceiver[99] ] → 提取结果:ClusterReceiver[99]
  • 示例B:[first-second-third-8050-exec-a ] → 提取结果:first-second-third-8050-exec-a
    完全符合你的期望结果。

不支持递归正则的环境(如JavaScript)

如果环境不支持递归正则,可以用代码逻辑辅助实现:

function getNestedBracketContent(str) {
  const contents = [];
  let depth = 0;
  let startIdx = -1;
  
  for (let i = 0; i < str.length; i++) {
    if (str[i] === '[') {
      depth++;
      if (depth === 1) startIdx = i + 1;
    } else if (str[i] === ']') {
      depth--;
      if (depth === 0 && startIdx !== -1) {
        contents.push(str.slice(startIdx, i));
        startIdx = -1;
      }
    }
  }
  return contents;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:01:14