Самый простой способ конвертировать URL в гиперссылку в строке C #? - PullRequest
15 голосов
/ 28 августа 2008

Я использую API Twitter и хочу преобразовать все 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>

Ответы [ 5 ]

23 голосов
/ 28 августа 2008

Регулярные выражения, вероятно, ваш друг для такого рода задач:

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

Регулярному выражению для соответствующих URL может потребоваться немного работы.

7 голосов
/ 28 августа 2008

Я сделал то же самое с jquery, используя 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);
    });
 };
5 голосов
/ 28 августа 2008

Это на самом деле ужасная проблема. URL-адреса могут содержать (и заканчиваться) знаками препинания, поэтому бывает сложно определить, где URL-адрес действительно заканчивается, когда он встроен в обычный текст. Например:

http://example.com/.

- допустимый URL, но он также может быть концом предложения:

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

Вы не можете просто проанализировать, пока не будет найден пробел, потому что тогда вы сохраните точку как часть URL. Вы также не можете просто проанализировать, пока точка или пробел не найдены, потому что точки очень часто встречаются в URL.

Да, регулярное выражение - ваш друг, но создание соответствующего регулярного выражения - сложная часть.

Проверьте это также: Расширение URL с помощью Regex в .NET .

1 голос
/ 04 февраля 2012

Вы можете добавить дополнительные элементы управления с помощью функции делегата 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;
}
1 голос
/ 18 апреля 2010

/ приветствие для RedWolves

из: this.replace (/ [A-Za-z] +: // [A-Za-z0-9- ] +. [A-Za-z0-9- :% & \? /.=] + /, функция (м) {...

см .: /[A-Za-z]+://[A-Za-z0-9-]+.[A-Za-z0-9-:%&\?/ . =] + /

Код для адресов «anyprotocol»: // «anysubdomain / domain». «Anydomainextension and address»,

и это прекрасный пример для других применений манипуляции со строками. Вы можете нарезать и нарезать кубиками по желанию с помощью .replace и вставлять нужные «a href» там, где это необходимо.

Я использовал jQuery, чтобы легко изменить атрибуты этих ссылок на «target = _blank» в моей логике загрузки контента, хотя метод .link не позволяет вам их настраивать.

Мне лично нравится привязывать пользовательский метод к строковому объекту для фильтрации строк на лету (объявление String.prototype.linkify), но я не уверен, как это будет развиваться в крупномасштабной среде, где Вы должны были бы организовать более 10 пользовательских функций, подобных линкифу. Я думаю, что вам определенно придется сделать что-то еще с вашей структурой кода в этот момент.

Может быть, ветеринар споткнется здесь и просветит нас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...