将URL转换为C#字符串中的超链接的最简单方法?

我正在使用Twitter API,并希望将所有URL转换为超链接。

你想出这个最有效的方法是什么?

string myString = "This is my tweet check it out http://tinyurl.com/blah"; 

 This is my tweet check it out http://tinyurl.com/>blah 

正则表达式可能是您执行此类任务的朋友:

 Regex r = new Regex(@"(https?://[^\s]+)"); myString = r.Replace(myString, "$1"); 

匹配URL的正则表达式可能需要一些工作。

我使用jquery来完成同样的事情,这里使用JSON API是linkify函数:

 String.prototype.linkify = function() { return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(m) { return m.link(m); }); }; 

这实际上是一个丑陋的问题。 URL可以包含标点符号(并以标题符号结尾),因此在将URL嵌入到普通文本中时,很难确定URL实际结束的位置。 例如:

 http://example.com/. 

是一个有效的URL,但它可以很容易地成为一个句子的结尾:

 I buy all my witty T-shirts from http://example.com/. 

您不能简单地解析,直到找到空格,因为那样您将把句点作为URL的一部分。 您也不能简单地解析直到找到句点或空格,因为句点在URL中非常常见。

是的,正则表达式是你的朋友,但构建适当的正则表达式是困难的部分。

请查看此内容: 使用.NET中的Regex扩展URL 。

您可以通过使用正则表达式的MatchEvaluator委托函数来添加更多控件:假设我有这个字符串:

 在http://www.stackoverflow.com上找到更多信息 

现在试试这段代码

 private void ModifyString() { string input = "find more on http://www.authorcode.com "; Regex regx = new Regex(@"\b((http|https|ftp|mailto)://)?(www.)+[\w-]+(/[\w- ./?%&=]*)?"); string result = regx.Replace(input, new MatchEvaluator(ReplaceURl)); } static string ReplaceURl(Match m) { string x = m.ToString(); x = "< a href=\"" + x + "\">" + x + ""; return x; } 

/为红狼队加油

from:this.replace(/ [A-Za-z] +:// [A-Za-z0-9- ] +。[A-Za-z0-9- :%&\?/.=] + / ,function(m){…

见:/ [A-Za-z] +:// [A-Za-z0-9- ] +。[A-Za-z0-9- :%&\?/.=] + /

地址为“anyprotocol”的代码://“anysubdomain / domain”。“anydomainextension and address”,

它是字符串操作的其他用途的完美示例。 你可以随意切片和切块.replace并在需要的地方插入适当的“a href”。

我使用jQuery在我的内容加载逻辑中轻松地将这些链接的属性更改为“target = _blank”,即使.link方法不允许您自定义它们。

我个人喜欢在字符串对象上使用自定义方法进行快速字符串过滤(String.prototype.linkify声明),但我不确定这会在大规模环境中如何发挥作用必须组织10个以上的自定义类似链接的function。 我认为你必须在那时用你的代码结构做一些其他事情。

也许兽医会在这里绊倒并启发我们。