日期:2014-05-17  浏览次数:20477 次

求。给文章关键字加链接函数。非常复杂。
现在网站经常要给文章里的关键字自动加链接。。所在这里就涉及

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


如我的文章为: 


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;
        }

------解决方案--------------------
探讨
最好写成一下函数。。头痛。为这个弄一半个月了。。。