我想处理一段文字,替换其中的关键字为加红,现在写了下面的程序,有两个方法,都是用来处理加红效果的,然而,都没有达到预期效果,其结果如下:
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));
}
}
运行结果 :
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
请问我如何做呢?因为要匹配大小写,所一我的正贼表达式写成那样了,比如,如果你搜索nba的匹配的话,那就是(^|[^</])([Nn][Bb][Aa])($|[^>])了。
十分感谢您的关注。。。
分享到:
- 2008-07-04 18:06
- 浏览 2721
- 评论(3)
- 论坛回复 / 浏览 (1 / 6235)
- 查看更多
相关推荐
使用 `appendReplacement` 方法来替换匹配到的字符串,并将结果追加到 `StringBuffer` 对象 `buf` 中。这样可以有效地构建新的字符串,其中原始字符串中的匹配项被替换为 "java" 或 "JAVA"。 5. **尾部追加**: `...
而`appendReplacement()`和`appendTail()`方法则允许更复杂的替换逻辑,其中`appendReplacement()`会替换找到的匹配项,`appendTail()`则会添加未匹配的剩余文本。 #### 示例:简单的单词替换 下面的代码展示了...
#### 3.2 appendReplacement()方法 此方法用于将匹配的结果替换为指定的字符串。在本例中,我们将匹配到的所有标签都替换为空字符串: ```java while (result1) { matcher.appendReplacement(sb, ""); result1 =...
`Matcher.replaceAll` 内部使用 `appendReplacement` 方法逐步构建新的字符串,每次找到匹配项时,都会用替换字符串替换之。 `Matcher.appendReplacement` 方法的 `replacement` 参数支持使用 `$` 符号来引用匹配的...
在`while (m.find())`循环中,我们使用`Matcher`的`appendReplacement()`方法将所有匹配到的模式替换为`"<input>"`。需要注意的是,这个方法只会在当前匹配上操作,并不会直接修改原始字符串。因此,在所有的匹配...
### Java正则表达式Pattern与Matcher详解 #### 一、Java正则表达式的概述 在Java编程语言中,正则表达式(Regular Expression)是一种强大的文本...理解并熟练掌握它们的使用方法对于处理复杂的文本数据至关重要。
此外,Matcher还提供了groupCount()、replaceAll()、replaceFirst()、appendReplacement()、appendTail()、group(n)等方法用于捕获组匹配、替换和追加匹配字符串。 文档提到的实例教程部分,通过具体的例子演示了...
这段代码首先定义了一个正则表达式,用于匹配`[名称]{数值}`的模式,然后使用`Matcher`的`find`方法查找所有匹配项,并使用`appendReplacement`方法替换为指定格式。 最后,关于异常处理。在给出的两个代码片段中,...
5. **添加剩余文本**:使用`Matcher`对象的`appendTail()`方法将未被匹配的部分添加到结果中。 6. **返回结果**:返回过滤后的字符串。 #### 三、高级过滤 在实际应用中,可能还需要对某些特定的HTML标签进行更...
如果模板中包含动态内容,可以使用预编译的正则表达式和`Matcher`的`appendReplacement()`和`appendTail()`方法,结合`StringBuilder`进行复杂替换。这种方式适用于替换过程涉及多个步骤或者需要在替换时执行额外...
根据提供的文件信息,我们可以从中提炼出关于正则表达式的相关知识点。尽管原文中存在大量乱码及不清晰的部分,...掌握正则表达式的基本语法和使用方法对于从事软件开发、数据分析等领域的人来说是极其重要的技能之一。
通过`find()`循环查找并使用`appendReplacement()`将找到的"no"替换为"yes",最后用`appendTail()`添加剩余的未处理部分到`StringBuffer`,最终打印出替换后的字符串。 这些方法的组合使用使得在Java中进行复杂的...
`Matcher`提供了`replaceAll()`、`replaceFirst()`和`appendReplacement()`方法来进行字符串替换。`replaceAll()`替换所有匹配项,`replaceFirst()`只替换第一个匹配项,`appendReplacement()`用于构建新的字符串。...
除了`replaceAll()`,我们还可以使用`Matcher`的`find()`方法和`appendReplacement()`方法来逐个处理匹配项。`find()`方法会查找下一个匹配的子串,而`appendReplacement()`方法会将当前匹配前的文本复制到`...
在这篇实例教程中,我们将深入理解Java正则表达式的核心概念、优势、使用方法以及常见符号和实例。 1. **正则表达式基本概念** - **定义**:正则表达式(Regular Expression,简称regex)是一种模式,用于在字符串...
Matcher对象的`find()`方法可以用来查找匹配项,而`appendReplacement()`和`appendTail()`方法则用于替换操作。`replaceAll()`和`replaceFirst()`是String对象的方法,它们直接对整个字符串进行全局替换或只替换第...
4. **最终的字符串构建与返回**:经过一系列的转换和处理后,使用`Matcher`的`appendReplacement`和`appendTail`方法将修改后的标签插入到`StringBuffer`对象中,最后将该缓冲区转换为字符串并返回。 #### 使用场景...