文本: 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前面的\剃掉了。怎么回事儿,牛人们有啥办法么? 急!急!
作揖了
\"[^\"]*\"
代码:
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前面的\剃掉了。怎么回事儿,牛人们有啥办法么? 急!急!
作揖了
你的代码里我都没看到你的str,就看到aaa,bbb,跟你的那一串有啥关系
要匹配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)明白了?
实际rows[rowId].cells[0].innerHTML= "<input type="hidden" name ='resDel' value='"+resString+"'/>"
hidden前后的"/"并不是字符了,它们和前后的"组合,起转义的作用
再想想,think think think, use your mind !
不管是双引号之间的,还是转义双引号之间的,那个表达式是错误的,那个表达式只能处理不带有转义符的情况。你说的那个问题很好解决:在处理之前,使用下面这个方法过滤一下就可以了 private String processSpecialChar(String str) {
if(str.indexOf('\\') > -1) {
str = str.replace("\\", "\\\\");
}
if(str.indexOf('$') > -1) {
str = str.replace("$", "\\$");
}
return str;
}
bao110908 按照你的方法过滤后
执行结果:
rows[rowId].cells[0].innerHTML= "input type=\"hidden\\" name ='resDel' value='"+resString+"'/>";
说明只能把前面的\保留,而后面\被替换\\
s = processSpecialChar(rm.reset(m.group()).replaceAll(replacestr));
m.appendReplacement(sb1, s);
}