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]
}

最新文章

  1. Cwinux源码解析系列
  2. c/c++模板的定义和实现分开的问题及其解决方案
  3. Source not found The JAR file &hellip;has no source attachment.
  4. 常用的CSSreset整理
  5. 将 Qt 5.6 集成至 VS2015
  6. DMG提取安装文件
  7. oracle pl/sql 控制结构(分支,循环,控制)
  8. session、cookie与“记住我的登录状态”的功能的实现
  9. JAVA获取文件数据 ( xxxxx.json )
  10. leetcode之旅(7)-Move Zeroes
  11. SQL Server connect to MySQL SQL Server通过LinkServer访问MySQL数据库,并操作mysql数据库代码
  12. MeasureSpec介绍及使用详解
  13. 正则表达式&amp;自定义异常 典型案例
  14. HDUOJ--------(1198)Farm Irrigation
  15. EF6 使用SQLite Code First
  16. 从源码的角度再学「Thread」
  17. 训练指南 UVALive - 3415(最大点独立集)
  18. pip 安装库的时候使用豆瓣镜像 提升效率
  19. HttpServerUtility 和 HttpUyility
  20. 洛谷 2679 [NOIP 2015] 子串

热门文章

  1. 扒一扒ELF文件
  2. 玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定
  3. spark SQL (二) 聚合
  4. PHP-表单提交(form)
  5. 织梦(DedeCms)的安全问题解决办法
  6. Pytest(3)fixture的使用
  7. Spring学习笔记2
  8. 2020牛客暑期多校训练营(第八场)Interesting Computer Game
  9. HDU6703 array (线段树)
  10. hdu3341Lost's revenge (AC自动机+变进制dp)