Использование регулярного выражения C # для анализа доменного имени? - PullRequest
7 голосов
/ 24 июля 2010

Мне нужно разобрать доменное имя из строки. Строка может варьироваться, и мне нужен точный домен.

Примеры строк:

http://somename.de/
www.somename.de/
somename.de/
somename.de/somesubdirectory
www.somename.de/?pe=12

Мне нужно это в следующем формате с только именем домена, tld и www, если применимо:

www.somename.de

Как мне это сделать с помощью C #?

Ответы [ 4 ]

13 голосов
/ 24 июля 2010

В качестве альтернативы решению регулярных выражений вы можете позволить классу System.Uri проанализировать строку для вас. Вам просто нужно убедиться, что строка содержит схему.

string uriString = "http://www.google.com/search";

if (!uriString.Contains(Uri.SchemeDelimiter))
{
    uriString = string.Concat(Uri.UriSchemeHttp, Uri.SchemeDelimiter, uriString);
}

string domain = new Uri(uriString).Host;

Это решение также отфильтровывает любые номера портов и преобразует адреса IPv6 в его каноническую форму.

10 голосов
/ 24 июля 2010

я просто использовал

 Uri uri = new Uri("http://www.google.com/search?q=439489");
            string url = uri.Host.ToString();
            return url;

потому что, используя это, вы можете быть уверены.

2 голосов
/ 24 июля 2010

Я извлек Библиотека регулярных выражений , и похоже, что-то вроде этого может работать для вас:

^(([\w][\w\-\.]*)\.)?([\w][\w\-]+)(\.([\w][\w\.]*))?$
1 голос
/ 24 июля 2010

Попробуйте это:

^(?:\w+://)?([^/?]*)

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

string url = "http://www.google.com/hello";
Match match = Regex.Match(url, @"^(?:\w+://)?([^/?]*)");
string domain = match.Groups[1].Value;

В качестве бонуса, он также захватывает до первого ?, поэтому URL google.com?hello=world будет работать как положено.

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