java -split xpath-string into chunks(seperator [。+] ???)

时间:2018-03-13 05:07:03

标签: java regex string split

我有几个必须拆分的XPath表达式。 示例

NODEA[NODEA1/NODEA11][NODEA2/NODEA21][NODEA3/NODEA31]/NODEB

方括号中的东西可以是倍数。 我需要一个看起来像

的数组
NODEA[NODEA1/NODEA11]
NODEA[NODEA2/NODEA21]
NODEA[NODEA3/NODEA31]
NODEA/NODEB

我不知道正则表达式是什么样的。 我想我必须从右到左开始阅读。 除了aktual方括号帽之外,方形支撑中的所有东西都要删除吗? 也许我错了,有一个更好的解决方案。

由于我不经常使用正则表达式,所以我们非常感谢您的帮助。

非常感谢 问候 马里奥

1 个答案:

答案 0 :(得分:0)

对于您的示例,您可以通过使用alternation

获取不同的部分

NODEA|\[[^]]+]|\/NODEB

匹配

  • NODEA
  • |
  • \[[^]]+]匹配例如[NODEA1/NODEA11],匹配一个空缺[,然后不匹配],然后匹配]
  • |
  • NODEB

您可以遍历匹配并将这些部分添加到类似ArrayList的集合中。

然后删除并捕获该列表的第一个条目String nodeA,其余为NODEA,剩下的就是原样。

对于集合中的其他部分,您需要添加nodeA的值。然后,您可以遍历集合并将nodeA添加到集合中的所有条目:

String regex = "NODEA|\\[[^]]+]|\\/NODEB";
String string = "NODEA[NODEA1/NODEA11][NODEA2/NODEA21][NODEA3/NODEA31]/NODEB";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
ArrayList<String> ar = new ArrayList<String>();

while (matcher.find()) {
    ar.add(matcher.group(0));
}

String nodeA = ar.remove(0);

for (int i = 0; i < ar.size(); i++) {
    ar.set(i, nodeA + ar.get(i));
}

Demo Java