替换文本内容里面含有超链接的属性
由于工作的原因,需要将字符串里面的所有超链接里的属性改成“target=_blank”,我写了一个函数.写的很烂啊!我看的都很烂!希望大家指点下!给一个更好的方法!
protected void Page_Load(object sender, EventArgs e)
{
string txtContent = "测试用例<a href='www.baidu.com' target='_parent' title='jesse'>ss</a>年时间地哦<a title='jesse' href='www.baidu.com'>ss</a>年时间地哦<a href='www.baidu.com'>ss</a>年时间地哦<a href='www.baidu.com'>ss</a>年时间地哦<a href='www.baidu.com'>ss</a>";
txtContent=MatchTarget(txtContent);
Response.Write(txtContent);
}
private string MatchTarget(string txtContent)
{
Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""\s]?)(?<href>[^'""\s]*)\1[^>]*?>");
MatchCollection match = reg.Matches(txtContent);
//存储匹配超链接
string[] url = new string[match.Count];
//存储操作之后的超链接
string[] newUrl = new string[match.Count];
int i = 0;
foreach (Match m in match)
{
string replaceStr = m.ToString().Replace("<","");
replaceStr = replaceStr.Replace(">", "");
url[i] = m.ToString();
newUrl[i] = Find(replaceStr);
i++;
}
//将新的链接取代旧的链接
for (int j = 0; j < match.Count; j++)
{
bool falg = txtContent.IndexOf(url[j]) > -1;
if (falg)
{
txtContent=txtContent.Replace(url[j], newUrl[j]);
}
}
return txtContent;
}
//查找超链接里面属性-target='_blank'
private string Find(string content)
{
if ((content.IndexOf("target=") > -1))
{
if (!(content.IndexOf("target='_blank'") > -1))
{
string[] strArray = content.Split(' ');
StringBuilder strContent = new StringBuilder();
for (int i = 0; i < strArray.Length; i++)
{
if(strArray[i].ToString().IndexOf("target=")>-1)
{
strArray[i] = "target='_blank'";
}
strContent.Append(strArray[i].ToString()+" ");
}
content = strContent.ToString();
}
}
else
{
content = content + " target='_blank'";
}
return "<"+content+">";
}