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