我发现了一些使用正则表达式来检测文本段落中的 URL 模式并添加 HTML 代码以使它们链接的示例。这种方法的问题是,有时,输入段落既包含用纯文本编写的 URL(我想将其转换为可点击),也包含一些已经具有链接标记的 URL。例如,考虑这一段:
My favourite search engine is http://www.google.com but
sometimes I also use <a href="http://www.yahoo.com">http://www.yahoo.com</a>
我只想转换 Google 链接,但保留两个 Yahoo 链接。
我所追求的是一个 C# 函数,它使用正则表达式来检测 URL 并对其进行转换,但它会忽略周围有“A”标记标签或已经在“A”标签内的 URL。
编辑
这是我到目前为止所拥有的:
PostBody = "My favourite search engine is http://www.google.com but sometimes I also use <a href=\"http://www.yahoo.com\">http://www.yahoo.com</a>";
String pattern = @"http(s)?://([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?";
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(pattern);
System.Text.RegularExpressions.MatchCollection matches = regex.Matches(PostBody);
for (int i = 0; i < matches.Count; i++)
{
PostBody = PostBody.Replace(matches[i].Value, String.Format("<a href=\"{0}\">{1}</a>", matches[i].Value, matches[i].Value));
}
ltrlPostBody.Text = PostBody;
这就是我得到的(为了清楚起见,我将它分成多行):
My favourite search engine is
<a href="http://www.google.com">http://www.google.com</a>
but sometimes I also use
<a href="<a href="<a href="http://www.yahoo.com">http://www.yahoo.com</a>">
<a href="http://www.yahoo.com">http://www.yahoo.com</a></a>">
我只想转换第一个链接(在这种情况下),因为它还没有成为链接标记的一部分。