我有一个这样的 YAML 列表,需要用 Java 中的正则表达式对其进行解析:
stacks:
- name: test1
folder: a
- name: test2
folder: b
最后我想迭代列表文本块。这意味着在创建 Pattern 实例之后,我希望此文本的 Matcher 实例找到两个匹配项:
1.
name: test1
folder: a
2.
name: test2
folder: b
忽略列表名称(上面的“堆栈”)时,我可以执行以下操作:
String regex = "^\\s++-(.*$\\n(?:^\\s++[^-].*$\\n)*)";
Pattern p = Pattern.compile( regex, Pattern.MULTILINE | Pattern.UNIX_LINES );
Matcher m = p.matcher( data );
使用此表达式生成的匹配器将找到我需要的两个匹配项。
但是,我实际上不想忽略列表名称,我想声明“在以下列表名称之后获取所有列表元素”(如方法调用getListData(yamlData, listName)
)。看来我需要一个积极的向后回顾。不幸的是,我没有找到办法在仍然获得两场比赛的同时做到这一点。你有什么主意吗?
(我知道有snakeyaml等库,可惜这里需要用到正则表达式。)
编辑:我不能对所列对象的元素顺序做出任何假设。解决方案必须能够处理交换的名称和文件夹(可能还有其他)。