62,074
社区成员
发帖
与我相关
我的任务
分享
//委托方法
List<string> tags = new List<string>(new string[] { "c语言视频教程", "C语言教程", "c语言" }); //关键字如果可能出现包含关系,被包含的放在后面
int length = 0;
string temp = string.Empty;
string t = string.Empty;
List<string> list = new List<string>();
private string RegReplace(Match m)
{
temp = m.Value;
length = temp.Length;
foreach (string tag in tags)
{
t = Regex.Escape(tag);
temp = Regex.Replace(temp, @"(?is)^((?:(?:(?!" + t + @"|</?a\b).)*<a\b(?:(?!</?a\b).)*</a>)*(?:(?!" + t + @"|</?a\b).)*)(?<tag>" + Regex.Escape(tag) + @")", @"$1<a href=""http://www.21shipin.com"" target=""_blank"" title=""${tag}"">${tag}</a>");
if (length != temp.Length)
{
list.Add(tag);
}
length = temp.Length;
}
foreach (string s in list)
{
tags.Remove(s);
}
list.Clear();
return temp;
}
//调用
string str1 = "我想学习c语言教程,我想看的是C语言视频教程,其它什么C语言教程,我都不想看。我喜欢C语言";
Regex reg = new Regex(@"(?i)(?:^|(?<!<a\b(?>[^<>]*))>)(?>[^<>]*)(?:<|$)");
string result = reg.Replace(str1, RegReplace);
richTextBox2.Text = result;
//输出
我想学习<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语言
string str1 = "我想学习c语言教程,我想看的是C语言视频教程,其它什么C语言教程,我都不想看。我喜欢C语言";
str1 = System.Text.RegularExpressions.Regex.Replace(str1, @"(?<!c语言教程[\s\S]*)(c语言教程)(?![^>]*>)", "<a href=\"http://www.21shipin.com\" title=\"$1\">$1</a>", RegexOptions.IgnoreCase);
Response.Write(str1);