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

如何使用分组递归正则匹配含嵌套括号的赋值语句行?

嵌套结构整行匹配正则实现方案

匹配规则说明

  • 命中规则:行内同时存在「带任意嵌套圆括号的标识符 + 等号 + 带任意嵌套花括号的标识符」结构时,捕获整行
  • 排除规则:缺少等号、仅带圆括号无后续花括号赋值、仅带花括号无前置括号赋值的行全部不匹配

测试用例

  • 命中:foo(f1, f2()) = bar { b1, b2 {}} //match all of this
  • 排除:foo(f3) // dont match this
  • 排除:bar{b3} // dont match this

可用正则(支持递归语法的正则引擎可用)

^.*?\w+(?<parens>\((?:[^()]|(?&parens))*\))\s*=\s*\w+\s*(?<braces>\{(?:[^{}]|(?&braces))*\}).*$

核心递归逻辑说明

  • 圆括号嵌套匹配:(?<parens>\((?:[^()]|(?&parens))*\))
    定义命名捕获组parens匹配平衡圆括号对,组内要么匹配非括号普通字符,要么递归调用parens组本身匹配嵌套的括号结构,支持任意层级的圆括号嵌套。
  • 花括号嵌套匹配:(?<braces>\{(?:[^{}]|(?&braces))*\})
    定义命名捕获组braces匹配平衡花括号对,组内要么匹配非花括号普通字符,要么递归调用braces组本身匹配嵌套的花括号结构,支持任意层级的花括号嵌套。

注意事项

  • 该正则依赖正则引擎的递归子组语法,仅在PCRE(PHP、Nginx默认正则引擎)、Python第三方regex库、Java 9+内置正则、.NET正则环境下可正常运行。
  • 原生JavaScript、Go标准库正则、Rust默认regex库不支持递归语法,无法通过单个正则实现该需求,需要手写栈结构做括号平衡校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:39:15