粗粗地想了一下,本以为是比较简单的东西,比如   
  对于要求把关键字"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>

解决方案 »

  1.   


    String str = "[keyword]任意内容dfds[/keyword]";
    System.out.println(str.replaceAll("\\[keyword\\](.*)\\[/keyword\\]","<a href=\"www.csdn.net\">$1</a>"));
      

  2.   

    我已经做出来了发给大家看看   
    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>"));
    }}
      

  3.   

    感觉楼主给的程序用处不大,我有个想法,先将str赋值给str2,然后在每次替换之前将str2内容中的有链接的文字和html标签用特殊符号替换掉,如(&:保证关键字中没有该符号就可以了),然后用str2去匹配关键字,若存在,则在str中替换该关键字,同时让再次将str赋值给str2,然后进行下次循环。最后输出str。现在还有个问题就是我用str2匹配的时知道关键字“123”存在,然后我用str去替换时如何才能确定替换掉的“123”的位置就是str2中的那个,而不是另外的html标签中或是已经存在链接中的“123”。
      

  4.   

    Up  我也想知道啊..  找了一两天了都没找到一个满意的解决方案 ...    高手呀高手, Where are  you ..
      

  5.   

    这个是sina的面试题,我当时就是用的你说的这种方法,结果面试官一头雾水哈哈,现在我也没找出太好的方法