Регулярное выражение для преобразования URL в гиперссылки в .Net - PullRequest
2 голосов
/ 01 января 2009

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

http://www.somesite.com/default.aspx   

до

<a href="http://www.somesite.com/default.aspx">http://www.somesite.com/default.aspx</a>

Это довольно легко с помощью Regex.Replace (), но у меня проблема в том, что я хочу обрезать текст ссылки, если URL слишком длинный, например:

http://www.somesite.com/files/default.aspx?id=a78b38ae723b1f8ed232c23de7f9121d&n=93b34a732e074c934e32d123de19c83d

до

<a href="http://www.somesite.com/files/default.aspx?id=a78b38ae723b1f8ed232c23de7f9121d&n=93b34a732e074c934e32d123de19c83d">http://www.somesite.com/files/default.aspx?id=a78b38ae723b1f8...</a>

, чтобы он выглядел так:

http://www.somesite.com/files/default.aspx?id=a78b38ae723b1f8...

Я пытался использовать Regex.Matches (), но я не знаю, как заменить текст, какие-либо предложения?

Спасибо за вашу помощь ...

Edit: Не берите в голову парни, я понял это самостоятельно, это оказалось невероятно простым, я только использовал MatchEvaluator !

public static string Replace(
    string input,
    string pattern,
    MatchEvaluator evaluator
)

Ответы [ 3 ]

5 голосов
/ 01 января 2009

Это пример того, где ПРОСТО использует Regex пытается сделать слишком много . Я бы порекомендовал использовать Regex, чтобы НАЙТИ шаблоны, но используйте логику кода, чтобы настроить вывод по своему вкусу. Вывести новый шаблон с заменами несложно, но попытка контролировать длину текста ссылки слишком велика.

0 голосов
/ 01 января 2009

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

string displayText = url.Substring(0, maxLength);
string hyperlink = string.Format("<a href=\"{0}\">{1}</a>", url, displayText);
0 голосов
/ 01 января 2009

AFAIK нет встроенной поддержки для этого. Вам действительно придется самим перебирать Regex.Matches() и выполнять замену самостоятельно (через string.Replace или StringBuilder), обрезая текст там, где это необходимо.

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