用于解析YAML列表的正则表达式

时间:2013-02-04 14:45:00

标签: java regex yaml lookbehind

我有一个像这样的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和其他库。不幸的是,我需要在这里使用正则表达式。)

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

0 个答案:

没有答案