最简单的方法将URL转换为C#字符串中的超链接?
我正在使用Twitter API并希望将所有URL转换为超链接。最简单的方法将URL转换为C#字符串中的超链接?
你想出来做这件事最有效的方法是什么?
从
string myString = "This is my tweet check it out http://tinyurl.com/blah";
到
This is my tweet check it out <a href="http://tinyurl.com/blah">http://tinyurl.com/>blah</a>
正则表达式可能是你的朋友了这样的任务:
Regex r = new Regex(@"(https?://[^\s]+)");
myString = r.Replace(myString, "<a href=\"$1\">$1</a>");
的正则表达式匹配的URL可能需要一点工作。
我认为这很好,正则表达式功能强大,但捕获非空白比尝试在正则表达式中实现URL解析器要好得多。我可能会把它改成`(https?:// [^] +)`因为https并不罕见。 – 2010-04-18 07:47:46
这实际上是一个丑陋的问题。 URL可以包含(并以标点符号结尾),因此可能很难确定URL实际结束的时间,以及以正常文本嵌入的时间。例如:
http://example.com/.
是一个有效的URL,但它可以很容易地成为一个句子的结尾:
I buy all my witty T-shirts from http://example.com/.
你不能简单地分析,直到空间被发现,因为这样你将会保留这段时间作为网址的一部分。您也不能简单地解析,直到找到一段时间或空间,因为时间段在URL中非常常见。
是的,正则表达式是你的朋友在这里,但构造适当的正则表达式是困难的部分。
这是完美的.. :) – TimLeung 2009-03-26 18:50:29
我与jquery consuming the 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);
});
};
/为RedWolves
从欢呼:this.replace(/ [A-ZA-Z] + :// [A-ZA-z0-9- ] + [A-ZA-z0-9-:%& \ /.=] + /,函数(M){...
参见:[A-Za-z] +:// [A-Za-z0-9-] +。[A-Za-z0-9-:%& \ /.=] +/
还有的地址 “anyprotocol” 的代码:// “anysubdomain /域” “anydomainextension和地址”,
,这是一个完美的字符串操作的其他用法的例子。你可以根据需要随意切片和切块,并在需要时插入适当的“a href”。
我用jQuery很容易地在我的内容加载逻辑中将这些链接的属性更改为“target = _blank”,即使.link方法不允许您自定义它们。
我个人喜欢将自定义方法添加到字符串对象以供动态字符串过滤(String.prototype。linkify声明),但我不确定在一个需要组织10个自定义链接类函数的大规模环境中如何实现。我认为在那个时候你肯定会用你的代码结构做其他事情。
也许兽医会在这里绊倒并启发我们。
您可以通过使用正则表达式MatchEvaluator委托功能在此添加更多的控制: 假设我有这个字符串:
find more on 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 + "</a>";
return x;
}
对于这个应用程序,你应该寻找一种与Twitter本身解析URL完全一致的解决方案 - 正则表达式可能工作;只要确保使用相同的条件来匹配URL的末尾(比如点和右括号等),就像Twitter一样。 – 2010-04-18 11:17:46