首页 > 编程语言 > 详细

dart 匹配基本数组

时间:2020-03-01 23:03:51      阅读:110      评论:0      收藏:0      [点我收藏+]
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]
}

dart 匹配基本数组

原文:https://www.cnblogs.com/ajanuw/p/12392699.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!