Asp.net实现文章内关键词替换

注:本文虽为ItStrike原创文章.转载请注明出处

现在很多网站都有文章内关键词替换功能,比如:

.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这个词了,也就不会有重复替换的问题了~

本文完~~如有问题请加群31647020询问相关问题

注:本文虽为ItStrike原创文章.转载请注明出处

lucifer -
共有0个回答