当前位置: 代码迷 >> ASP.NET >> 求。给稿件关键字加链接函数。非常复杂
  详细解决方案

求。给稿件关键字加链接函数。非常复杂

热度:2423   发布时间:2013-02-25 00:00:00.0
求。给文章关键字加链接函数。非常复杂。
现在网站经常要给文章里的关键字自动加链接。。所在这里就涉及

到给指定关键字加链接,替换字符串问题 


如我的文章为: 


str1 = "我想学习c语言教程,我想看的是C语言视频教程,其它什

么C语言教程,我都不想看。我喜欢C语言" 


我要替换的关键字数组为: 

str2 ={c语言视频教程,C语言教程,c语言}; 


替换加链接的关键字规则如下: 

1.只替换第一次匹配的关键字,给其增加链接,即使其被 <a>标

签包含着,且A标签中有title属性,title属性的值就是被匹配关

键字 

注意:
1.虽然匹配,但该被匹配的字符串,被 <a>标签包含着,或是a标

签中的title属性的值,则跳过, 




希望最后替换后的结果为: 

str1 = “我想习学 <a href="http://www.21shipin.com" 

target="_blank" title="C语言教程">c语言教程</a>,我想看的

是 <a href="http://www.21shipin.com" target="_blank" 

title="C语言视频教程">C语言视频教程 </a>,其它什么 <a 

href="http://www.21shipin.com" target="_blank" title="C语

言">C语言 </a>教程,我都不想看。我喜欢C语言” 


请问这个功能怎么实现。。。求教了。。 


最好写成一下函数。。头痛。为这个弄一半个月了。。。





------解决方案--------------------------------------------------------
C# code
        public string FilterStr(string value, IList<string> filterList, bool isIgnoreCase, bool isReplaceAll)        {            string returnValue = value;            string constFilter = "~!@##@!~";            for (int i = 0; i < filterList.Count; i++)            {                if (isIgnoreCase)                {                    //不区分大小写                    returnValue = System.Text.RegularExpressions.Regex.Replace(returnValue, filterList[i], constFilter + i.ToString(), System.Text.RegularExpressions.RegexOptions.IgnoreCase);                }                else                {                    //区分大小写                    returnValue = returnValue.Replace(filterList[i], constFilter + i.ToString());                }            }            string[] array;            for (int i = 0; i < filterList.Count; i++)            {                if (isReplaceAll)                {                    returnValue = returnValue.Replace(constFilter + i.ToString(), string.Format("<a href=\"http://www.21shipin.com\" target=\"_blank\" title=\"{0}\">{0} </a>", filterList[i]));                }                else                {                    if (returnValue.Contains(constFilter + i.ToString()))                    {                        array = System.Text.RegularExpressions.Regex.Split(returnValue, constFilter + i.ToString(), System.Text.RegularExpressions.RegexOptions.IgnoreCase);                        for (int j = 0; j < array.Length; j++)                        {                            if (j == 0)                            {                                returnValue = string.Format("{0}<a href=\"http://www.21shipin.com\" target=\"_blank\" title=\"{1}\">{1} </a>", array[0], filterList[i]);                            }                            else                            {                                returnValue += string.Format("{0}{1}", array[j], (j == array.Length - 1 ? "" : filterList[i]));                            }                        }                    }                }            }            return returnValue;        }
------解决方案--------------------------------------------------------
探讨
最好写成一下函数。。头痛。为这个弄一半个月了。。。