请教appendReplacement的用法

我想处理一段文字,替换其中的关键字为加红,现在写了下面的程序,有两个方法,都是用来处理加红效果的,然而,都没有达到预期效果,其结果如下:
[code]
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestGetNewStr {

public static String getNewStr(String str,String regEx,StringBuffer pre) {
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
int startIndex = 0;
int endIndex = 0;
String oldStr = "";
String newStr = "";
boolean b = true;
if (m.find()) {
oldStr = m.group();
newStr = "<span style=\"color:red\">"+ oldStr +"</span>";
startIndex = m.start();
endIndex = m.end();
pre.append(str.substring(0, startIndex) + newStr);
String temp = str.substring(endIndex);
getNewStr(temp,regEx,pre);
b = false;
}
if (b) {
pre.append(str);
}
return pre.toString();
}

public static String getNewStr2(String str,String regEx,StringBuffer pre) {
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
while (m.find()) {
m.appendReplacement(pre, "<span style=\"color:red\">$2</span>");
}
m.appendTail(pre);
return pre.toString();
}

public static void main(String[] args) {
String str = "nbasfksdNbafspandjdk<a>dksfdkspanBajfkdadd</a><span style=\"color:red\">djksnbakdspanjksjf</span>djfkspandjdfknba";
String regEx = "(^|[^</])([Ss][Pp][Aa][Nn])($|[^>])";
StringBuffer pre = new StringBuffer();
System.out.println(getNewStr(str,regEx,pre));
StringBuffer pre2 = new StringBuffer();
System.out.println(getNewStr2(str,regEx,pre2));
}
}
[/code]

运行结果 :

[code]
nbasfksdNba<span style="color:red">fspand</span>jdk<a>dksfd<span style="color:red">kspanB</span>ajfkdadd</a><span style="color:red">djksnbak<span style="color:red">dspanj</span>ksjf</span>djf<span style="color:red">kspand</span>jdfknba


nbasfksdNba<span style="color:red">span</span>jdk<a>dksfd<span style="color:red">span</span>ajfkdadd</a><span style="color:red">djksnbak<span style="color:red">span</span>ksjf</span>djf<span style="color:red">span</span>jdfknba
[/code]

请问我如何做呢?因为要匹配大小写,所一我的正贼表达式写成那样了,比如,如果你搜索nba的匹配的话,那就是(^|[^</])([Nn][Bb][Aa])($|[^>])了。


十分感谢您的关注。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值