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

您想出的最有效的方法是什么?

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 的正则表达式可能需要一些工作。

其他提示

我做了同样的事情 jquery 使用 JSON API 这是链接函数:

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 中使用正则表达式扩展 URL.

您可以通过使用 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;
}

/为红狼队加油

从: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/domain”。“anydomainextension 和地址”,

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

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

我个人喜欢在字符串对象上添加一个自定义方法,以进行动态字符串过滤(String.prototype.linkify 声明),但我不确定这在大型环境中会如何发挥作用。必须组织 10 多个类似 linkify 的自定义函数。我认为此时您肯定需要对代码结构做其他事情。

也许兽医会在这里偶然发现并启发我们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top