Регулярное выражение 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 шт):
Вот код, который работает, спасибо EvgeniyZ
var test = new Uri(selectedText);
if (Uri.TryCreate(selectedText, UriKind.RelativeOrAbsolute, out test))
{
///
{
Регулярное выражение для поиска ссылок выглядит вот так:
(https?:\/\/|ftps?:\/\/|www\.)((?![.,?!;:()]*(\s|$))[^\s]){2,}
А посмотреть, как оно работает можно тут: https://ru.stackoverflow.com/a/1003343/178988.