16

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>
4

5 に答える 5

23

正規表現は、おそらくこの種のタスクの友です。

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

URL を一致させるための正規表現には、多少の作業が必要になる場合があります。

于 2008-08-28T15:54:16.923 に答える
7

JSON APIを使用するjqueryでこれとまったく同じことを行いました。これは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);
    });
 };
于 2008-08-28T16:13:18.047 に答える
5

これは実際には厄介な問題です。URL には句読点を含める (および句読点で終わる) ことができるため、URL が通常のテキストに埋め込まれている場合、URL が実際にどこで終了するかを判断するのが難しい場合があります。例えば:

http://example.com/.

は有効な URL ですが、簡単に文末になる可能性があります。

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

URL の一部としてピリオドを保持するため、スペースが見つかるまで単純に解析することはできません。また、URL ではピリオドが非常に一般的であるため、ピリオドまたはスペースが見つかるまで単純に解析することはできません。

はい、ここでは正規表現が役に立ちますが、適切な正規表現を作成するのは難しい部分です。

これもチェックしてください: Expanding URLs with Regex in .NET .

于 2008-08-28T16:05:06.117 に答える
1

/RedWolvesに乾杯

from: 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 and address" のコードがあります。

これは、文字列操作の他の用途の完璧な例です。.replace を使用して、必要に応じて適切な "a href" を挿入することができます。

.link メソッドではカスタマイズできませんが、jQuery を使用してこれらのリンクの属性を簡単に「target=_blank」に変更しました。

私は個人的に、オンザフライの文字列フィルタリング (String.prototype.linkify 宣言) のために文字列オブジェクトにカスタム メソッドを追加するのが大好きですが、それが大規模な環境でどのように機能するかはわかりません。 10 以上のカスタム linkify のような関数を整理する必要があります。その時点で、コード構造で何か他のことをしなければならないと思います。

獣医がここでつまずいて、私たちを啓発するかもしれません.

于 2010-04-18T07:27:41.260 に答える
1

正規表現で 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 + "</a>";
    return x;
}
于 2012-02-04T09:23:20.550 に答える