关于正则表达式:将URL转换为C#字符串中的超链接的最简单方法?

关于正则表达式:将URL转换为C#字符串中的超链接的最简单方法?

Easiest way to convert a URL to a hyperlink in a C# string?

我正在使用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
http://example.com/.

是有效的网址,但很容易成为句子的结尾:

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的函数。我认为您那时肯定必须对代码结构做其他事情。

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


推荐阅读