このようなYAMLリストがあり、Javaの正規表現で解析する必要があります。
stacks:
- name: test1
folder: a
- name: test2
folder: b
最後に、リストのテキストブロックを繰り返します。つまり、Patternインスタンスを作成した後、このテキストのMatcherインスタンスで2つの一致を検索する必要があります。
1.1。
name: test1
folder: a
2.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 );
この式で生成されたマッチャーは、必要な2つの一致を見つけます。
ただし、実際にはリスト名を無視したくないので、「次のリスト名の後にすべてのリスト要素を取得する」(メソッド呼び出しのようにgetListData(yamlData, listName)
)と述べたいと思います。前向きな後ろ向きが必要なようです。残念ながら、2つのマッチを取得しながら、これを行う方法が見つかりませんでした。何か考えはありますか?
(snakeyamlやその他のライブラリがあることは知っています。残念ながら、ここでは正規表現を使用する必要があります。)
編集:リストされたオブジェクトの要素の順序については何も推測できません。ソリューションは、スワップされた名前とフォルダー(および場合によっては他のフォルダー)を処理できる必要があります。