现在网站经常要给文章里的关键字自动加链接。。所在这里就涉及
到给指定关键字加链接,替换字符串问题
如我的文章为:
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; }
------解决方案--------------------------------------------------------