我正在使用Twitter API,并希望将所有URL转换为超链接。
您想出的最有效方法是什么?
从
1
| string myString ="This is my tweet check it out http://tinyurl.com/blah"; |
至
1
| This is my tweet check it out http://tinyurl.com/>blah |
正则表达式可能是您完成此类任务的朋友:
1 2
| Regex r = new Regex(@"(https?://[^\\s]+)");
myString = r.Replace(myString,"$1"); |
用于匹配URL的正则表达式可能需要一些工作。
我使用消耗JSON API的jquery做了同样的事情,这里是linkify函数:
1 2 3 4 5
| 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的实际终止位置。例如:
是有效的网址,但很容易成为句子的结尾:
1
| I buy all my witty T-shirts from http://example.com/. |
在找到空格之前,您不能简单地进行分析,因为那样您会将句点保留为URL的一部分。在找到句点或空格之前,您也不能简单地进行解析,因为句点在URL中极为常见。
是的,正则表达式是您的朋友,但是构建适当的正则表达式是困难的部分。
也请检查以下内容:在.NET中使用Regex扩展URL。
您可以使用带有正则表达式的MatchEvaluator委托函数来对此添加更多控件:
假设我有这个字符串:
1
| find more on http://www.stackoverflow.com |
现在尝试此代码
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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){...
see: /[A-Za-z]+://[A-Za-z0-9-]+.[A-Za-z0-9-:%&\\?/.=]+/
地址为" anyprotocol"://" anysubdomain / domain"的代码。" anydomain扩展名和地址",
这是字符串处理的其他用途的完美示例。您可以使用.replace随意切片和切块,并在需要的地方插入适当的" a href"。
我使用jQuery在内容加载逻辑中轻松地将这些链接的属性更改为" target = _blank",即使.link方法不允许您自定义它们。
我个人喜欢对字符串对象使用自定义方法以进行动态字符串过滤(String.prototype.linkify声明),但是我不确定在大型环境中如何实现该目的。必须组织10多个自定义的类似linkify的函数。我认为您那时肯定必须对代码结构做其他事情。
也许兽医会在这里绊倒并启发我们。