嵌套括号的java正则表达式

时间:2014-10-12 19:54:47

标签: java regex

考虑以下java String:

String input = "a, b, (c, d), e, f, (g, (h, i))";

你能帮我找一个java regexp来获得它的6个部分:

a
b
(c,d)
e
f
(g, (h,i))

这是从基于“最外部”逗号的原始输入字符串中获得的。

1 个答案:

答案 0 :(得分:3)

不要尝试将regex用于此类任务,因为Java中的regex不支持递归。最简单的解决方案是编写自己的解析器,它将计算()的余额(我们称之为括号嵌套级别),如果嵌套级别为{{1,则仅在,上拆分}}。

此任务的简单代码(也将在一次迭代中解决此问题)看起来像

0

用法:

public static List<String> splitOnNotNestedCommas(String data){
    List<String> resultList = new ArrayList();

    StringBuilder sb = new StringBuilder();
    int nestingLvl = 0;
    for (char ch : data.toCharArray()){
        if (ch == '(') nestingLvl++;
        if (ch == ')') nestingLvl--;
        if (ch == ',' & nestingLvl==0){
            resultList.add(sb.toString().trim());
            sb.delete(0, sb.length());
        }else{
            sb.append(ch);
        }
    }
    if (sb.length()>0)
        resultList.add(sb.toString().trim());

    return resultList;
}

输出:

for (String s : splitOnNotNestedCommas("a, b, (c, d), e, f, (g, (h, i))")){
    System.out.println(s);
}
相关问题