粗粗地想了一下,本以为是比较简单的东西,比如
对于要求把关键字"csdn"都加上链接"http://www.csdn.net/"
只需要在保存之前
content=replace(content,"csdn","<a href=""http://www.csdn.net"" target=""_blank"">csdn</a>")
但是仔细一想,如果这样简单处理,会可能存在以下3个问题:
一、多次保存:
第一次保存之后是
<a href="http://www.csdn.net" target="_blank">csdn</a>
当第二次修改保存之后,就会变成
<a href="http://www.csdn.net" target="_blank"><a href="http://www.csdn.net" target="_blank">csdn</a></a>
二、多个关键字处理,比如:
1、要求把关键字"csdn.net"都加上链接"http://www.csdn.org/"
2、要求把关键字"csdn"都加上链接"http://www.csdn.net/"
顺序处理下来
就会变成
<a href="http://www.csdn.org" target="_blank"><a href="http://www.csdn.net target="_blank">csdn</a>.net</a>
三、原来已在链接中的关键字,比如:
对
<a href="http://www.csdn.net/">欢迎访问csdn社区</a>
处理之后,就会变成
<a href="http://www.csdn.net/">欢迎访问<a href="http://www.csdn.net target="_blank">csdn</a>社区</a>
以上这些,显然都不符合关键字自动链接的本意,要求应该是
1、只处理一次
2、不出现嵌套<a>标签的情况
3、已在链接中的关键字,不再处理
于是我想如果我用特殊方式处理一下
如[keyword]csdn[/keyword] 再进行处理,每次只对[keyword]...[/keyword] 进行替换就不会出现重复替换问题了
但是本人对正则一窍不通 还望各位大虾能够帮帮忙写一个替换的正则表达式:
将[keyword]任意内容[/keyword]替换
<a href="www.csdn.net">任意内容</a>
对于要求把关键字"csdn"都加上链接"http://www.csdn.net/"
只需要在保存之前
content=replace(content,"csdn","<a href=""http://www.csdn.net"" target=""_blank"">csdn</a>")
但是仔细一想,如果这样简单处理,会可能存在以下3个问题:
一、多次保存:
第一次保存之后是
<a href="http://www.csdn.net" target="_blank">csdn</a>
当第二次修改保存之后,就会变成
<a href="http://www.csdn.net" target="_blank"><a href="http://www.csdn.net" target="_blank">csdn</a></a>
二、多个关键字处理,比如:
1、要求把关键字"csdn.net"都加上链接"http://www.csdn.org/"
2、要求把关键字"csdn"都加上链接"http://www.csdn.net/"
顺序处理下来
就会变成
<a href="http://www.csdn.org" target="_blank"><a href="http://www.csdn.net target="_blank">csdn</a>.net</a>
三、原来已在链接中的关键字,比如:
对
<a href="http://www.csdn.net/">欢迎访问csdn社区</a>
处理之后,就会变成
<a href="http://www.csdn.net/">欢迎访问<a href="http://www.csdn.net target="_blank">csdn</a>社区</a>
以上这些,显然都不符合关键字自动链接的本意,要求应该是
1、只处理一次
2、不出现嵌套<a>标签的情况
3、已在链接中的关键字,不再处理
于是我想如果我用特殊方式处理一下
如[keyword]csdn[/keyword] 再进行处理,每次只对[keyword]...[/keyword] 进行替换就不会出现重复替换问题了
但是本人对正则一窍不通 还望各位大虾能够帮帮忙写一个替换的正则表达式:
将[keyword]任意内容[/keyword]替换
<a href="www.csdn.net">任意内容</a>
String str = "[keyword]任意内容dfds[/keyword]";
System.out.println(str.replaceAll("\\[keyword\\](.*)\\[/keyword\\]","<a href=\"www.csdn.net\">$1</a>"));
package com.ext.system.util;import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/** */
/**
* @author LJ-silver
*/
public class ReplaceKeyword { public ReplaceKeyword() {
}
public static String replaceKeyword(String targetString,
String matchString, String replaceString) {
String out;
int targetLength = targetString.length();
int replaceLength = replaceString.length();
int matchLength = matchString.length();
StringTokenizer st = new StringTokenizer(targetString, matchString);
int firstIndex = targetString.indexOf(matchString); if (firstIndex < 0) {
// 无匹配
out = targetString; return out;
} if (firstIndex > 0) {
out = "";
} else {
// 以要替换的字符串开头
out = replaceString;
} while (st.hasMoreTokens()) {
out += st.nextToken() + replaceString;
} out = out.substring(0, out.length() - replaceLength); int lastIndex = targetString.lastIndexOf(matchString); // 以要替换的字符串结尾
if (lastIndex == (targetLength - matchLength)) {
out = out + replaceString;
} return out;
}
public static String replaceText(String text,String keyword,int replaceTimes){
int i=0;
String replaceStr="";
String regex="\\[key\\](.*?)\\[/key\\]";
Pattern p =Pattern.compile(regex);
Matcher m=p.matcher(text);
while(m.find()){
replaceStr+=m.group();
if(keyword.equals(m.group(1))){
i++;
if(i<=replaceTimes){
System.out.println(m.group(1));
}
}
if(m.group(1).equals("个人贷款")){
System.out.println(m.group(1));
}
}
return replaceStr;
}
public static void main(String[] args) {
String str = "卡的房间[key]贷款[/key]kdajfkl打开附件[key]个人贷款[/key]阿卡多几[key]贷款[/key]分快乐大师傅贷款";
String keyword="贷款";
int replaceTimes=1;
/*String s[] = str.split("\\[key\\]");
String s1 = "";
for (int i = 0; i < s.length; i++) {
//System.out.println(s[i]);
if (i <= 0) {
s1 = s1 + s[i];
} else {
s1 = s1
+ ("[key]" + s[i])
.replaceAll("\\[key\\]\\S{0,11}\\[/key\\]",
"<a href='http://www.google.cn'>ddd</a>");
}
}
System.out.println(s1);*/
//System.out.println(str.replaceAll("\\[key\\]\\S*\\[/key\\]","[key]bb[/key]"));
replaceText(str,keyword,replaceTimes);
//System.out.println(replaceText(str));
//System.out.println("发生的放卡贷款浪费adsAgdg爱过对方贷款;asdf;是否合法的".replaceAll("a", "<a href='http://www.google.cn'>a</a>"));
//System.out.println(replaceKeyword("发生的放卡贷款浪费adsgdg爱过对方贷款;asdf;是否合法的","贷款", "<a href='http://www.google.cn'>贷款</a>"));
}}