有这样一个字符串"to_timestamp('1970-01-01 08:00:00.0', 'yyyy-mm-dd HH24:MI:SS.FF'),'test String',11347"
我想用String的split方法把它分成
to_timestamp('1970-01-01 08:00:00.0', 'yyyy-mm-dd HH24:MI:SS.FF')
'test String'
11347
规则就是用逗号分开,除了在括号内的逗号,请问要怎么写这个正则表达式?

解决方案 »

  1.   

    String pattern = "(?<!\\([^\\)]{1,1000}),";
    String html = "to_timestamp('1970-01-01 08:00:00.0', 'yyyy-mm-dd HH24:MI:SS.FF'),'test String',11347";
    String[] str = html.split(pattern);
    for(int i=0;i<str.length;i++){
    System.out.println(str[i]);
    }
      

  2.   

    这个好像不对,查不出来
    结果是:
    to_timestamp('1970-01-01 08:00:00.0'
     'yyyy-mm-dd HH24:MI:SS.FF')
    'test String'
    11347
      

  3.   

    to_timestamp('1970-01-01 08:00:00.0', 'yyyy-mm-dd HH24:MI:SS.FF')
    'test String'
    11347
    3L的结果是这样的。
      

  4.   

    3L的表达式?和<之间多了一个空格,去掉空格后得到:
    to_timestamp('1970-01-01 08:00:00.0'
     'yyyy-mm-dd HH24:MI:SS.FF')
    'test String'
    11347
    JDK1.5.19
      

  5.   

    如果说,你给的str真的就是一个特例,实际的例子里面,会出现各种组合,比如上面的三个顺序颠倒等;
    那么,你的目的就是要将一个字符串里面的一类分隔符中的某一个或几个没有足够特征的给剔除掉,这基本是没可能的,不确定因素太多了;即使是上面的字符串,你需要做分隔符的','跟要保留的','也没有足够的区别。
    更关键的是,你要的split只能是用','分割,匹配条件越多,最终丢掉的字符越多,最后找回更麻烦所以上面的要一步到位,好像没什么可能,还是分几步来做吧
      

  6.   

    大家好,是这样的,绝对正确
    String pattern = "(?<![^\\)]{1,30}),";
    String html = "to_timestamp('1970-01-01 08:00:00.0','yyyy-mm-dd HH24:MI:SS.FF'),'test String',11347";
    String[] str = html.split(pattern);
    for (int i = 0; i < str.length; i++) {
    System.out.println(str[i]);
    }
      

  7.   

    result:
    to_timestamp('1970-01-01 08:00:00.0','yyyy-mm-dd HH24:MI:SS.FF')
    'test String',11347
      

  8.   


    以前还没注意可以非捕获的,不错,学到了,呵呵
    不过非捕获的也是要匹配的,所以你只能把timestamp后面的第一个','给弄出来,后面的就不行了
      

  9.   


    String html = "to_timestamp('1970-01-01 08:00:00.0','yyyy-mm-dd HH24:MI:SS.FF'),'test String',11347";
    Pattern pattern=Pattern.compile(".*?\\([^(]*\\)|[^,]+");

    Matcher mat=pattern.matcher(html);
    while(mat.find()){
    System.out.println(mat.group());
    }
      

  10.   

    如果在to_timestamp('1970-01-01 08:00:00.0','yyyy-mm-dd HH24:MI:SS.FF'),前面还有xxxx, 呢?应该怎么分?