zoukankan      html  css  js  c++  java
  • dart 匹配基本数组

    List<dynamic> evalList(String text) {
      var r = [];
      var i = 0;
      var isList = false;
      void parseStart() {
        var m = RegExp(r'^s*[s*').firstMatch(text);
        while (m != null) {
          // print('start before: ' + text);
          if (i != 0) {
            r.add([]);
            isList = true;
          }
          i++;
          text = text.substring(m.end);
          // print('start after: ' + text);
          m = RegExp(r'^s*[s*').firstMatch(text);
        }
      }
    
      void parseEnd() {
        var m = RegExp(r'^]s*,?s*').firstMatch(text);
        while (m != null) {
          // print('end before: ' + text);
          if (i > 2) {
            var b = r[r.length - 2];
            b.add(r.removeLast());
          } else {
            isList = false;
          }
          i--;
          text = text.substring(m.end);
          // print('end after: ' + text);
          m = RegExp(r'^]s*,?s*').firstMatch(text);
        }
      }
    
      while (text.isNotEmpty) {
        RegExpMatch m;
        // 匹配开头
        parseStart();
    
        // 匹配结束
        parseEnd();
    
        // 匹配item
        m = RegExp(r's*([^[],]*)s*,?').firstMatch(text);
        if (m != null) {
          var v = m.group(1);
          if (v.isNotEmpty) {
            if (isList) {
              r.last.add(v);
            } else {
              r.add(v);
            }
          }
    
          text = text.substring(m.end);
        }
      }
      return r;
    }
    
    void main() {
      var ar = '''[1,['h', ['w'], 'a'], 'x', [[],[], [],1],2]''';
      print(evalList(ar)); // [1, ['h', ['w'], 'a'], 'x', [[], [], [], 1], 2]
    }
    
  • 相关阅读:
    [NOI2021] 路径交点
    CF1188D Make Equal
    CF1349F1 Slime and Sequences
    CF1067D Computer Game
    Dcat Admin安装
    PHP 中提示undefined index如何解决(多种方法)
    Git 常用命令大全
    项目维护环境部署
    bootstrap-table
    bootstrap-datetimepicker
  • 原文地址:https://www.cnblogs.com/ajanuw/p/12392699.html
Copyright © 2011-2022 走看看