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

如何在Dart中遍历非标准嵌套配置结构并提取顶层子区块?

嵌套配置区块提取实现方案

问题原因

你原先使用的正则\[[^\][]*]仅能匹配内部不包含方括号的括号对,所以会优先匹配到配置中最内层的数组结构(比如["foo" "bar" "baz"]),无法正确捕获包含嵌套括号的外层目标区块。

解决方案

Dart 正则引擎支持递归匹配语法,可以实现任意层级嵌套方括号的完整匹配,修改后的代码如下:

void main() {
  
  String str = '''[
  [
   a: 1
   b: ["foo" "bar" "baz"]
  ]

  [
   c: 2
   d: "some value"
   e: ["mike" "piter"]
  ]

  [
   f: 3
   g: "some another value"
  ]
  ]''';
  
  // 支持嵌套方括号匹配的正则
  final nestedBracketRegex = RegExp(r'\[(?:[^][]|(?R))*\]');
  
  Iterable<RegExpMatch> allMatches = nestedBracketRegex.allMatches(str);
  List<String> blocks = allMatches.map((match) => match.group(0)!).toList();
  
  // 移除最长的最外层包裹块,剩余为目标区块
  blocks.sort((a, b) => b.length.compareTo(a.length));
  blocks.removeAt(0);
  
  // 逐个打印目标区块
  for (var blk in blocks) {
    print(blk);
    print('\n');
  }
}

正则逻辑说明

  • \[ 匹配起始左方括号
  • (?:[^][]|(?R))* 为核心匹配规则:
    • [^][] 匹配所有非方括号的字符(包含换行符)
    • (?R) 代表递归复用整个正则表达式,用来匹配嵌套的方括号结构
    • 两种规则重复匹配,直到命中当前层级对应的右方括号
  • \] 匹配当前层级的结束右方括号

运行上述代码即可按顺序输出你需要的三个配置区块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:36:02