String txt = "aaa,bbb(20,3),ccc,ddd(ww,qq)"
String[] arr = txt.split("");  //这里写什么正则??//最后想得到的结果是:
arr[0] = "aaa";
arr[1] = "bbb(20,3)";
arr[2] = "ccc";
arr[3] = "ddd(ww,qq)";
这个正则怎么写啊?试了半天没搞定,请大家帮忙~~
最好说明一下答案的意思,学习一下,谢谢了!

解决方案 »

  1.   

    没有想到方法,txt.split()是把字符串按照某个字符或串进行分割
      

  2.   

    耶,搞定了。public class Test{    public static void main(String args[]) {
            String str = "aaa,bbb(20,333,333),ccc,ddd(ww,qq,333,555),ee(aaa,33),ff";
            String regex = ",(?![^(]*\\)\\s*(?:,|$))";
            String[] strs = str.split(regex);
            for(String s : strs) {
                System.out.println(s);
            }
        }
    }
      

  3.   

    String txt = "aaa,bbb(20,ddd(1, 2)),ccc,ddd(ww,qq)"楼主,这种你想分割嘛?
      

  4.   

    这种东西我向来手写,你这个搞个栈就搞定了,RTF都被我搞定了。
      

  5.   

    你到网上搜RTF解析器,可能就能找到我写的。
      

  6.   


    这种就很难做了,Perl 和 .Net 中支持递归结构的正则表达式,在 Java 
    中做不到,要实现的话得动态生成正则表达式,这是相当麻烦的。如果存在这种情况的话,还是采用甘草的方法用栈吧。
      

  7.   


    这种不分解,不用嵌套的,有好方法吗,最好还能解释一下,学习学习~
    感谢6楼bao110908 ,能不能解释一下啊 String regex = ",(?![^(]*\\)\\s*(?:,|$))"; ?????
      

  8.   

    一开始做不来 一看火龙果的才恍然
    但貌似这样就满足了
    String regex = ",(?![^(]*\\))";
    不知道后面的非捕获有何深意
      

  9.   

    to: dracularking我错了,不好意思哈,开始把所有的条件都加上去了,也没有把它们擦掉再试试看了,呵呵。
      

  10.   

    String regex = ",(?![^(]*\\))";逗号左边的缝隙后面不允许出现,以闭括号结尾的非开括号的一些字符,就是括号中逗号所具有的特征。
      

  11.   

    HOHO~~开玩笑了~~不过真的想听听这个正则的解释,dracularking ,bao110908 你俩都会,麻烦讲讲吧~~
      

  12.   

    以 (? 开头的都是非捕获结构,即在匹配完成后不会在内存中保留,
    而 () 这种形式的会在内存中保留下来,以备后用。a(?=X),表示 a 的后面允许跟着字母 X,可以看成 a 字符后面的缝隙
    a(?!X),表示 a 的后面不允许跟着字母 X
    (?<=X)a,表示 a 的前面允许出现字母 X
    (?<!X)a,表示 a 的前面不允许出现字母 X