import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RetTest {
// 要实现的功能是去掉包含关键词外面的a标签,然后添加新的标签
public static void main(String[] args) {
// 文章
String content = "ads<a href=\"abc.html\" >关键词</a> f<a hfef=\"不应该被替换\"> j</a>oj关键词dlte sts<a href=\"abc.html\" >关键词sc</a>f sdf";
// 要给关键词设置的链接
String href = "新标签";
// 关键词
String kw = "关键词";
System.out.println(updateKw(kw, href, content));
} public static String updateKw(String kw, String href, String content) {
// 首先找到关键词外包裹的a标签去掉
String newContent = content;
// String reg = "(<a.*?d.*?a>)";
String reg = "(<a.*?" + kw + ".*?a>)";
Pattern pattern = Pattern.compile(reg, Pattern.DOTALL);
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
String findKw = matcher.group(1);
System.out.println(findKw);
String newFindKw = findKw.replaceAll("<a.*?>", "").replaceAll("</a>", "");
newContent = newContent.replaceAll(findKw, newFindKw);
}
// 然后给关键加上新的 a标签
return newContent.replaceAll(kw, "<a href=\"" + href + "\">" + kw + "</a>");
}}问题是下面不是关键词的标签也被匹配到了,要找到的标签只要包含关键就算,如“关键词”,“关键词abc”
<a>.</a>关键词<a>..</a>