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]
}
dart 匹配基本数组的更多相关文章
- MongoDB 学习笔记之 匹配完整数组
匹配完整数组: 创建一个集合(包含数组) db.ArrayTest.insert({name: "Sky" , address: [{"street" : &q ...
- Dart语言学习(六) Dart 列表List数组
创建List : var list = [1,2,3,"Dart",true]; 创建不可变List : var list = const [1,2,3,"Dart&qu ...
- dart 匹配基本map
var map_start = RegExp(r'^\s*\{\s*'); var map_end = RegExp(r'^\}\s*(,)?\s*'); var hasComma = true; M ...
- mongodb 内嵌数组查询问题: 如何限定返回与条件匹配的数组
原文地址:https://segmentfault.com/q/1010000002943721
- php数组和正则表达式的替换拆分匹配所有
正则表达式 $s = "a1s2d3f1g5f";//echo preg_replace("/\d/","#",$s); //替换 //$ ...
- js两个数组对象通过相同元素匹配筛选
let a = [ { name: 'joy', year: '24' }, { name: 'eve', year: '25' } ] let b = [ { name: 'joy', city: ...
- DART: a fast and accurate RNA-seq mapper with a partitioning strategy DART:使用分区策略的快速准确的RNA-seq映射器
DART: a fast and accurate RNA-seq mapper with a partitioning strategyDART:使用分区策略的快速准确的RNA-seq映射器 Abs ...
- MongoDB 数组
MongoDB是文档型数据库,每个文档(doc)表示数据的一项记录.相比关系型DB的row只能使用简单的数据类型,doc能够使用复杂的数据类型:内嵌doc,数组.MongoDB的数组是一系列元素的集合 ...
- js去除数组重复项
/** * js去除数组重复项 */ //方法一.使用正则法 // reg.test(str),匹配得到就返回true,匹配不到返回false var arr = ["345",& ...
随机推荐
- P4826
总的来说, 这道题只考查了单纯的建图和最大生成树 但这却是蓝题(问号 题意 题意的理解比较麻烦 简单说就是 n 支队伍比赛,i 号队伍和 j 号队伍比赛可获得 i ^ j 的分数,然后其中一支队伍会输 ...
- Spring听课笔记(专题一)
Spring入门课程:https://www.imooc.com/learn/196 第0章: Spring是为解决企业应用程序开发复杂性而创建的一个Java开源框架,应用非常广泛.业内非常流行的SS ...
- 浏览器关闭后,Session就销毁了吗?
https://blog.csdn.net/QQ1012421396/article/details/70842148 话题: 当浏览器关闭后,Session就销毁了吗?答案: ...
- mvn 多模块
mvn archetype:generate -DgroupId=com.xxx.cloud -DartifactId=myapp -Dversion=1.0.0-SNAPSHOT -Dpackage ...
- CCPC2019网络赛总结
比赛那会过了两道题,哇贼激动,然后后面就没有然后了... 1003我想到用$kmp$,于是不会$kmp$的我开始找板子套,结果$TLE$,就觉得应该是优化不行,优化后AC妥妥$TLE$,就放弃了. 钓 ...
- CF 666E Forensic Examination 【SAM 倍增 线段树合并】
CF 666E Forensic Examination 题意: 给出一个串\(s\)和\(n\)个串\(t_i\),\(q\)次询问,每次询问串\(s\)的子串\(s[p_l:p_r]\)在串\(t ...
- Codeforces Global Round 11 C. The Hard Work of Paparazzi(dp/最长上升子序列)
题目链接:https://codeforces.com/contest/1427/problem/C 题意 \(r\) 行与 \(r\) 列相交形成了 \(r \times r\) 个点,初始时刻记者 ...
- Educational Codeforces Round 88 (Rated for Div. 2) C. Mixing Water(数学/二分)
题目链接:https://codeforces.com/contest/1359/problem/C 题意 热水温度为 $h$,冷水温度为 $c\ (c < h)$,依次轮流取等杯的热冷水,问二 ...
- Educational Codeforces Round 88 (Rated for Div. 2) D、Yet Another Yet Another Task
题意: 给你一个含n个数a1,a2...an的数组,你要找到一个区间[l,r],使得al+a(l+1)+...+a(r-1)+ar减去max(al,a(l+1),...,a(r-1),ar)的值尽可能 ...
- 2019 Multi-University Training Contest 5——permutation 2
传送门 题意: t组输入,之后每组例子有三个数n.x.y代表在一个以x为开头y为结尾的长为n的数组里面,开头和结尾数据已经固定,让你从1--n中找其他数据填入数组中 (每个数据不能重复使用),使它满足 ...