文章内容都是以前数据库里的。
要求是:
比如一篇文章的 关键字 是“手机”,需要把文章内容中的“手机”两个字,做成链接,就是加上<a></a>标签。
开始想用replace做,可发现有的<img>标签的alt属性里,也有“手机”两个字,这个是不能加上链接<a></a>标签的。
请问如何解决这个问题?
正则能行么?

解决方案 »

  1.   

    要写复杂点的正则了.
    可以考虑:忽略<>标签中的字符,在余下的字符中进行替换.
      

  2.   

    http://topic.csdn.net/u/20090604/17/b3da6a6e-f2ab-43ca-95ef-9ac592e6226c.html?57510
    看看这个,是被推荐的帖子
      

  3.   


    .Net中的Asp.net替换成.Net中的<a href="asp.net">Asp.net</a>本文就是教你如何实现该功能,以及实现该功能所遇到的难题,以及如何解决.继续本文开头的例子,你可以看到,如果只是替换asp.net这个关键词,用.net是很容易实现的,如下string test = test.Replace("Asp.net","<a href=\"asp.net\">Asp.net</a>");但是实际使用中,并不会那么简单,比如我们增加另一个关键词.net ,现在我们使用上述语句将会得到如下结果:<a href=".net">.Net</a>.Net中的<a href="asp.net">Asp<a href=".net">.net</a></a>上面的结果并不是我们想要的,但为什么会这样呢?因为Asp.net包含了.Net这个关键词,所以在上面的语句实现替换时就会出现重复替换的问题.解决的方法也不难,其实很简单,首先我们声明一个临时变量来保存文章内容,如下string txt=".Net中的Asp.net";string content=txt;然后我们把关键字按照长度又长到短排序.接着进行循环处理string txt = ".Net中的Asp.net";List<string> keywordlist = new List<string>();keywordlist.Add("Asp.net");keywordlist.Add(".net");string content = txt;foreach (string keyword in keywordlist){...}
    在循环体内,我们使用正则来查找关键词:Regex r = new Regex(keyword.name, RegexOptions.IgnoreCase);                   MatchCollection mc = r.Matches(content);                   if (mc.Count > 0)                   {                       int i = 0;                       foreach (Match m in mc)                       {                           if (m.Success)                           {...                           }                       }                   }
    我们每次查找出后,就将临时变量content里的关键词替换成等长度的*,例如查找Asp.net,替换后就是.Net中的*******这样,等到下次循环到.Net这个关键词时.临时变量里就没有ASP.NET这个词了,也就不会有重复替换的问题了~
      

  4.   

    我也要这个效果,好像用正则来写吧,除去<>之外的来匹配关键字,谁给一个提示或者思路?