文本: rows[rowId].cells[0].innerHTML= "  <input type=\"hidden\" name ='resDel' value='"+resString+"'/>";现在要匹配2个双引号之间内容有aaa天换成bbb表达式:
\"[^\"]*\"
代码:
 str就是上面文本
      String pattern="\"[^\"]*\"";
    String searchstr="aaa";
    String replacestr="bbb";
       Pattern r = Pattern.compile(searchstr);
       Matcher rm = r.matcher("");
       Pattern p = Pattern.compile(pattern);
       Matcher m = p.matcher(str);
       StringBuffer sb1 = new StringBuffer();
       StringBuffer sb2 = new StringBuffer();
       String s ="";
       while(m.find()) {
             s = rm.reset(m.group()).replaceAll(replacestr);
           m.appendReplacement(sb1, s);
       }
       m.appendTail(sb1);
但是sb1.tostring()是: rows[rowId].cells[0].innerHTML= " input type="hidden\" name ='resDel' value='"+resString+"'/>";
把hidden前面的\剃掉了。怎么回事儿,牛人们有啥办法么? 急!急!
作揖了
 
        

解决方案 »

  1.   

    把完整的代码贴出来,然后指出哪里有问题,期望值,实际值
    你的代码里我都没看到你的str,就看到aaa,bbb,跟你的那一串有啥关系
      

  2.   

    str是下面文件读出来的文件内容: rows[rowId].cells[0].innerHTML= "  <input type=\"hidden\" name ='resDel' value='"+resString+"'/>"; 
      

  3.   

    我要实现的功能就是
    要匹配2个双引号之间内容有aaa天换成bbb 
    但是现在执行程序后

    rows[rowId].cells[0].innerHTML= "  <input type=\"hidden\" name ='resDel' value='"+resString+"'/>"; 处理成rows[rowId].cells[0].innerHTML= " input type="hidden\" name ='resDel' value='"+resString+"'/>"; 为啥?正确的结果是处理前和处理后是一样的(因为这个文本双引号之间内容没有aaa)明白了? 
      

  4.   

    rows[rowId].cells[0].innerHTML= "  <input type=\"hidden\" name ='resDel' value='"+resString+"'/>"; 
    实际rows[rowId].cells[0].innerHTML= "<input type="hidden" name ='resDel' value='"+resString+"'/>"
    hidden前后的"/"并不是字符了,它们和前后的"组合,起转义的作用
    再想想,think think think, use your mind !
      

  5.   

    rows[rowId].cells[0].innerHTML= " input type="hidden\" name ='resDel' value='"+resString+"'/>"; 再问最后一遍,你需要处理双引号之间的字符,还是转义双引号之间的字符?你的需求相当得不明确,你只说是双引号之间的字符,那到底是双引号之间的,还是转义双引号之间的?你没有说清楚。
    不管是双引号之间的,还是转义双引号之间的,那个表达式是错误的,那个表达式只能处理不带有转义符的情况。你说的那个问题很好解决:在处理之前,使用下面这个方法过滤一下就可以了    private String processSpecialChar(String str) {
            if(str.indexOf('\\') > -1) {
                str = str.replace("\\", "\\\\");
            }
            if(str.indexOf('$') > -1) {
                str = str.replace("$", "\\$");
            }
            return str;
        }
      

  6.   


    bao110908 按照你的方法过滤后
    执行结果:
    rows[rowId].cells[0].innerHTML= "input type=\"hidden\\" name ='resDel' value='"+resString+"'/>";
    说明只能把前面的\保留,而后面\被替换\\
      

  7.   

    请在这个过程中处理!while(m.find()) {
        s = processSpecialChar(rm.reset(m.group()).replaceAll(replacestr));
        m.appendReplacement(sb1, s);
    }
      

  8.   

    按照你的表达式,只能处理红色的部分,我想应该是不对的,我已经连续说了三次了!rows[rowId].cells[0].innerHTML="<input type=\"hidden\" name ='resDel' value='"+resString+"'/>";