分裂的正则表达式模式

use*_*961 -6 java regex parsing

我想解决这个问题.

  • , 逗号:拆分条款
  • " 双引号:字符串值(忽略特殊字符)
  • [] 排列

例如:

输入: a=1,b="1,2,3",c=[d=1,e="1,2,3"]

预期产量:

    a=1
    b="1,2,3"
    c=[d=1,e="1,2,3"]
Run Code Online (Sandbox Code Playgroud)

但我无法超越结果.

我写了下面的代码:

 String line = "a=1,b=\"1,2,3\",c=[d=1,e=\"1,11\"]";
 String[] tokens = line.split(",(?=(([^\"]*\"){2})*[^\"]*$)");
 for (String t : tokens)
      System.out.println("> " + t);
Run Code Online (Sandbox Code Playgroud)

我的输出是:

a=1
b="1,2,3"
c=[d=1
e="1,11"]
Run Code Online (Sandbox Code Playgroud)

我需要更改什么才能获得预期的输出?我应该坚持正则表达式还是其他解决方案更灵活,更容易维护?

Boh*_*ian 52

这个正则表达式可以解决这个问题:

",(?=(([^\"]*\"){2})*[^\"]*$)(?=([^\\[]*?\\[[^\\]]*\\][^\\[\\]]*?)*$)"
Run Code Online (Sandbox Code Playgroud)

它的工作原理是将先行在逗号后对匹配的方括号中的-如果你是里面的方括号内,你当然不会有平衡支架下面.

这是一些测试代码:

String line = "a=1,b=\"1,2,3\",c=[d=1,e=\"1,11\"]";
String[] tokens = line.split(",(?=(([^\"]*\"){2})*[^\"]*$)(?=([^\\[]*?\\[[^\\]]*\\][^\\[\\]]*?)*$)");
for (String t : tokens)
    System.out.println(t);
Run Code Online (Sandbox Code Playgroud)

输出:

a=1
b="1,2,3"
c=[d=1,e="1,11"]
Run Code Online (Sandbox Code Playgroud)