除非分隔符用引号或括号保护,否则如何拆分字符串?

时间:2014-08-17 16:52:10

标签: java regex string split

我问How to split a string with conditions。现在我知道如果它在两个字符之间,如何忽略分隔符。

如何检查多组两个字符而不是一组? 我找到了Regex for splitting a string using space when not surrounded by single or double quotes,但我不知道将''更改为[]的位置。此外,它仅适用于两个组。

是否有使用,分割的正则表达式,但如果它位于"" [] 之间,则忽略分隔符{}? 例如:

// Input
"text1":"text2","text3":"text,4","text,5":["text6","text,7"],"text8":"text9","text10":{"text11":"text,12","text13":"text14","text,15":["text,16","text17"],"text,18":"text19"}
// Output
"text1":"text2"
"text3":"text,4"
"text,5":["text6","text,7"]
"text8":"text9"
"text10":{"text11":"text,12","text13":"text14","text,15":["text,16","text17"],"text,18":"text19"}

1 个答案:

答案 0 :(得分:2)

您可以使用:

text = "\"text1\":\"text2\",\"text3\":\"text,4\",\"text,5\":[\"text6\",\"text,7\"],\"text8\":\"text9\",\"text10\":{\"text11\":\"text,12\",\"text13\":\"text14\",\"text,15\":[\"text,16\",\"text17\"],\"text,18\":\"text19\"}";

String[] toks = text.split("(?=(?:(?:[^\"]*\"){2})*[^\"]*$)(?![^{]*})(?![^\\[]*\\]),+");
for (String tok: toks)
    System.out.printf("%s%n", tok);

- RegEx Demo

<强>输出:

"text1":"text2"
"text3":"text,4"
"text,5":["text6","text,7"]
"text8":"text9"
"text10":{"text11":"text,12","text13":"text14","text,15":["text,16","text17"],"text,18":"text19"}