Регулярное выражение C# URL

Нужно отличать обычный текст от url, но не слишком придирчиво(т.е. пусть лучше проскочит текст, нежели url будет принят за текст)

но вот только лучшая регулярка с этого сайта https://mathiasbynens.be/demo/url-regex падает в эксепшн "Недостаточно шестнадцатеричных цифр" а все остальные, в том числе и с других сайтов, не пропускают слишком много url-адресов, в том числе и адреса https://ru.stackoverflow.com (похоже из-за кириллицы в ссылках на вопросы) или тот-же https://mathiasbynens.be/demo/url-regex

вот мой код, который даже https://ru.stackoverflow.com/questions/ask не пропускает

string regex = @"@^(https?|ftp)://[^\s/$.?#].[^\s]*$@iS";
if (Regex.IsMatch(selectedText, regex, RegexOptions.IgnoreCase))
{
...
}


Ответы (2 шт):

Автор решения: Anron Galaburda

Вот код, который работает, спасибо EvgeniyZ

 var test = new Uri(selectedText);
 if (Uri.TryCreate(selectedText, UriKind.RelativeOrAbsolute, out test))
 {
  ///
 {
→ Ссылка
Автор решения: Qwertiy

Регулярное выражение для поиска ссылок выглядит вот так:

(https?:\/\/|ftps?:\/\/|www\.)((?![.,?!;:()]*(\s|$))[^\s]){2,}

А посмотреть, как оно работает можно тут: https://ru.stackoverflow.com/a/1003343/178988.

→ Ссылка