Как выполнить расширенный анализ URL с помощью RegEx? - PullRequest
2 голосов
/ 14 октября 2010

Я использую следующий метод для разбора URL:

Regex.Replace(text, @"((www\.|(http|https|ftp)\://)[.a-z0-9-]+\.[a-z0-9\/_:@=.+?,##%&~-]*[^.|\'|\# |!|\(|?|,| |>|<|;|\)])",
                            "<a href=\"$1\" target=\"&#95;blank\">$1</a>", RegexOptions.IgnoreCase).Replace("href=\"www.", "href=\"http://www.");

Отлично работает, но:

  1. asd http://google.com будет проанализирован, так как я могу запретить символы перед "http://" /" www "?

  2. Когда URL-адрес находится внутри тега, я не хочу его анализировать:

[URL] http://google.com[/url]

Как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 14 октября 2010

добавлено ^ в начале и $ в конце, ничего не предшествует http и после нормального URL

Regex.Replace(text, @"^((www\.|(http|https|ftp)\://)[.a-z0-9-]+\.[a-z0-9\/_:@=.+?,##%&~-]*[^.|\'|\# |!|\(|?|,| |>|<|;|\)])$",
                            "<a href=\"$1\" target=\"&#95;blank\">$1</a>", RegexOptions.IgnoreCase).Replace("href=\"www.", "href=\"http://www.");
1 голос
/ 14 октября 2010

используйте ^ перед http и www, что означает, что ваша строка должна начинаться с http, www или https или ftp

^(www\.|(http|https|ftp)
0 голосов
/ 14 октября 2010

Так как кажется, что URL является частью, частью или блоком текста, используйте \b для границы слова:

Regex.Replace(text, @"\b((www\.| ... "

Ваш второй вопрос немного сложнее - вы рассматривали возможность использования одного и того же регулярного выражения для обеих задач?

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