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