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

如何使用正则表达式提取带有成对开闭方括号的对应值?

嵌套方括号匹配问题解答

是否可以用正则实现

分两种情况:

  • 如果你使用的是仅支持基础POSIX正则规则的引擎,无法实现任意层数嵌套的方括号匹配。基础正则本质是有限状态自动机,没有存储嵌套层数的能力,无法处理层数未知的嵌套结构。
  • 如果你使用的是PCRE、.NET、Java、Python regex 库这类支持递归匹配特性的现代正则引擎,完全可以实现需求。

可用正则示例

仅匹配成对嵌套的方括号内容

可正确识别任意层数嵌套,不会在第一个闭括号处截断:

\[((?>[^\[\]]+|(?R))*)\]

逻辑说明:

  • \[ 匹配左方括号起始
  • (?>[^\[\]]+|(?R))* 原子组内匹配两种内容:非方括号的普通字符、递归调用整个正则匹配内层嵌套的方括号结构
  • \] 匹配与最外层左括号对应的右方括号

同时匹配三类目标内容

如果要同时匹配[[String]]、[String]、无括号的String三类内容,可增加分支:

\[((?>[^\[\]]+|(?R))*)\]|[^\[\]]+

(可根据你对String的字符范围要求调整最后一段[^\[\]]+的匹配规则)

不支持递归引擎的替代方案

如果所用环境不支持正则递归,直接写简单的栈逻辑解析即可:遍历字符串,遇到[时嵌套计数加1,遇到]时计数减1,计数归0时就截取对应区间的内容,实现复杂度很低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:06:07