求正则,关键词内链!
/// <summary>
/// 为关键词加上超链接
/// </summary>
/// <param name="htmlcode">要把关键词加上超链接的html源文本</param>
/// <param name="keyword">将要加上超链接的关键词</param>
/// <param name="title">将要加上的超链接的描文本</param>
/// <param name="url">将要加上的超链接的url地址</param>
/// <param name="target">将要加上的超链接的打开方式</param>
/// <param name="num">为html文本内的前num个关键词加上超链接,0代表全加上超链接</param>
/// <returns>返回为关键词加上超链接后的html文本</returns>
private string test(string htmlcode, string keyword, string title, string url, string target,int num)
{
Regex reg = new Regex(@"(?in)[^<>]+(?=(<(?!/(pre|a))[^<>]*>[^<>]*)*(<(a|pre)\b|$))");
string strReplacement = "<a href=\"" + url + "\" title=\"" + title + "\" target=\"" + target + "\" >" + keyword + "<a>";
return reg.Replace(htmlcode, strReplacement, num);
}
(?in)[^<>]+(?=(<(?!/(pre|a))[^<>]*>[^<>]*)*(<(a|pre)\b|$))
这个是正则表达式
<a title="abc">abc</a>adabc<pre title="abc">
abcde</pre>abcd<div title="abc">abcdefabc</div>
这个是过滤文本
替换后就变成
<a title="abc">abc</a><a href="http://www.baidu.com/" title="关键词">关键词</a><pre title="abc"><a href="http://www.baidu.com/" title="关键词">关键词</a>
abcde</pre><a href="http://www.baidu.com/" title="关键词" >关键词</a><div title="abc"><a href="http://www.baidu.com/" title="关键词" >关键词</a></div>
这个不是我想要的结果。。。
结果应该为
<a title="abc">abc</a>ad<a href="http://www.baidu.com/" title="关键词">关键词</a><pre title="abc">
abcde</pre><a href="http://www.baidu.com/" title="关键词" >关键词</a>d<div title="abc"><a href="http://www.baidu.com/" title="关键词" >关键词</a>def<div title="abc"><a href="http://www.baidu.com/" title="关键词" >关键词</a></div>
就是只替换不在标签属性(比如title)和a标签和pre标签里的关键词(这里用abc来替代)
懂的大虾给正则,对的就给分。不要拷贝别人的东西啊,很多都是错的。
------解决方案--------------------
C# code
string str=@"<a title=""abc"">abc</a>adabc<pre title=""abc"">
abcde</pre>abcd<div title=""abc"">abcdefabc</div>";
string result = Regex.Replace(str, @"(?<!<(?:a|pre)[^>]*>[^<>]*|title="")abc(?![^<>]*</(?:a|pre)>|"")", @"<a href=""http://www.baidu.com"" title=""天天向上"">天天向上</a>");
Console.WriteLine(result);
/*
<a title="abc">abc</a>ad<a href="http://www.baidu.com" title="天天向上">天天向上
</a><pre title="abc">
abcde</pre><a href="http://www.baidu.com" title="天天向上">天天向上</a>d<div tit
le="abc"><a href="http://www.baidu.com" title="天天向上">天天向上</a>def<a href=
"http://www.baidu.com" title="天天向上">天天向上</a></div>
*/
--