Как сопоставить URL в c #? - PullRequest
9 голосов
/ 24 августа 2009

Я нашел много примеров того, как сопоставлять определенные типы URL-адресов в PHP и других языках. Мне нужно сопоставить любой URL из моего приложения C #. Как это сделать? Когда я говорю об URL, я говорю о ссылках на любые сайты или файлах на сайтах и ​​в подкаталогах и т. Д.

У меня есть такой текст: «Перейдите на мой потрясающий веб-сайт http: \ www.google.pl \ что-то \ blah \? Lang = 5», иначе мне нужно получить эту ссылку из этого сообщения. Ссылки могут начинаться только с www. тоже.

Ответы [ 7 ]

17 голосов
/ 24 августа 2009

Если вам нужно проверить свое регулярное выражение, чтобы найти URL, вы можете попробовать этот ресурс

http://gskinner.com/RegExr/

Он проверит ваше регулярное выражение, пока вы его пишете.

В C # вы можете использовать регулярные выражения, например, как показано ниже:

Regex r = new Regex(@"(?<Protocol>\w+):\/\/(?<Domain>[\w@][\w.:@]+)\/?[\w\.?=%&=\-@/$,]*");
// Match the regular expression pattern against a text string.
Match m = r.Match(text);
while (m.Success) 
{
   //do things with your matching text 
   m = m.NextMatch();
}
15 голосов
/ 13 июля 2012

У Microsoft есть хорошая страница с некоторыми регулярными выражениями ... это то, что они говорят (тоже неплохо работает)

^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?$

http://msdn.microsoft.com/en-us/library/ff650303.aspx#paght000001_commonregularexpressions

5 голосов
/ 24 августа 2009

Вот один из определений для URL.

^http(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?$

http://msdn.microsoft.com/en-us/library/ms998267.aspx

5 голосов
/ 24 августа 2009

Я не уверен, что именно вы спрашиваете, но хорошим началом будет класс Uri , который будет анализировать URL для вас.

1 голос
/ 24 августа 2009
Regex regx = new Regex("http(s)?://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", RegexOptions.IgnoreCase); 
0 голосов
/ 08 января 2019
          //This code return (protocol://)host:port from URL

          //Commented URL's with different protocols. Just uncomment to test.
          //string url = "http://www.contoso.com:8080/letters/readme.html";
          //string url = "ftp://www.contoso.com:8080/letters/readme.html";
          //string url = "l2tp://1.5.8.6:8080/letters/readme.html";
          string url = "l2tp://1.5.8.6:8080/letters/readme.html";

          string host = "";//empty string with host from url
                //protocol, (ip/domain), port
          host = Regex.Match(url, @"^(?<proto>\w+)://+?(?<host>[A-Za-z0-9\-\.]+)+?(?<port>:\d+)?/", RegexOptions.None, TimeSpan.FromMilliseconds(150)).Result("${proto}://${host}${port}");
                //(ip/domain):port without protocol. If HTTPS board loading images from HTTP host.
          //host = Regex.Match(url, @"^(?<proto>\w+)://+?(?<host>[A-Za-z0-9\-\.]+)+?(?<port>:\d+)?/", RegexOptions.None, TimeSpan.FromMilliseconds(150)).Result("${host}${port}");

          Console.WriteLine("url: "+url+"\nhost: "+host); //display host

см. https://rextester.com/PVSO54371

0 голосов
/ 24 августа 2009

Это вернет коллекцию совпадений всех совпадений, найденных в "yourStringThatHasUrlsInIt":

var pattern = @"((ht|f)tp(s?)\:\/\/|~/|/)?([w]{2}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?";
var regex = new Regex(pattern);
var matches = regex.Matches(yourStringThatHasUrlsInIt);

Возвращение будет "MatchCollection", о котором вы можете прочитать подробнее здесь:

http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchcollection.aspx

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