ccalbodyid='1002QQ100000000000RV' 
and (
 (cinventoryid='0001QQ1000000000263B' and vfree1='0001QQ1000000000A9OU')
     or (cinventoryid='0001QQ1000000000238W' and vfree1='0001QQ1000000000A9OV')
     or (cinventoryid='0001QQ1000000000238W' and vfree1='0001QQ1000000000A9Ol')
     or (cinventoryid='0001QQ1000000000238W' and vfree1='0001QQ1000000000A9Om')
     or (cinventoryid='0001QQ1000000000238W' and vfree1='0001QQ1000000000A9On')
     .....
)
上面这个字符串,or()部分会重复而且重复个数不确定。
现在想把and vfree1=''部分全部替换为一个空字符。vfree1是一个20位长度的字符串。更改后的结果应该是:
and (
 (cinventoryid='0001QQ1000000000263B' )
     or (cinventoryid='0001QQ1000000000238W' )
     or (cinventoryid='0001QQ1000000000238W' )
     or (cinventoryid='0001QQ1000000000238W' )
     or (cinventoryid='0001QQ1000000000238W' )
     .....
)
请问用该怎么改?最好是用正则表达式。

解决方案 »

  1.   

    s=s.replaceAll("(?s)and vfree1='\\w{20}'","");
      

  2.   


    String s="(cinventoryid='0001QQ1000000000263B' and vfree1='0001QQ1000000000A9OU') or (cinventoryid='0001QQ1000000000263B' and vfree1=''0001QQ1000000000A9On'')";
    String regex=" and vfree1=\\'\\d{4}\\w{2}\\d{10}\\w{4}\\'";
    s=s.replaceAll(regex, "");
    System.out.println(s);
      

  3.   

    2楼OK。
    3楼没来得及试,但是貌似复杂了,vfree1就是个20位的字符串,不分数字和字母啥的,可能被我贴出来的值给误导了,呵呵。