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"]
但我无法超越结果.
我写了下面的代码:
 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);
我的输出是:
a=1
b="1,2,3"
c=[d=1
e="1,11"]
我需要更改什么才能获得预期的输出?我应该坚持正则表达式还是其他解决方案更灵活,更容易维护?
Boh*_*ian 52
这个正则表达式可以解决这个问题:
",(?=(([^\"]*\"){2})*[^\"]*$)(?=([^\\[]*?\\[[^\\]]*\\][^\\[\\]]*?)*$)"
它的工作原理是将先行在逗号后对匹配的方括号中的-如果你是里面的方括号内,你当然不会有平衡支架下面.
这是一些测试代码:
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);
输出:
a=1
b="1,2,3"
c=[d=1,e="1,11"]
| 归档时间: | 
 | 
| 查看次数: | 733 次 | 
| 最近记录: |