1

我有一个这样的 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等库,可惜这里需要用到正则表达式。)

编辑:我不能对所列对象的元素顺序做出任何假设。解决方案必须能够处理交换的名称和文件夹(可能还有其他)。

4

0 回答 0