2010-07-24 11 views
7

Alan adını bir dizeden ayrıştırmam gerekiyor. Dize değişebilir ve tam etki alanına ihtiyacım var. DizeEtki alanı adını ayrıştırmak için C# regex kullanma?

Örnekler:

http://somename.de/ 
www.somename.de/ 
somename.de/ 
somename.de/somesubdirectory 
www.somename.de/?pe=12 
Sadece alan adı ile aşağıdaki biçimde ihtiyaç

, tld ve www varsa: Ben bunu nasıl yapacağım

www.somename.de 

C# kullanarak?

+0

hey daha temiz hale getirdiğiniz için teşekkürler – Neutralizer

cevap

10

i çünkü tabii ki yapabilirsin bu kullanarak

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

kullanılan

basit.

2

Ben Regular Expression Library teslim ve sizin için işe yarayabilecek böyle bir şey gibi görünür:

^(([\w][\w\-\.]*)\.)?([\w][\w\-]+)(\.([\w][\w\.]*))?$ 
+0

Hayır bu işe yaramıyor – Neutralizer

+2

@Umair Ashraf - muhtemelen nasıl çalıştığını açıklamalısınız. Eşleşmediği bir örnek verebilir misin? – Kobi

+1

Nasıl çalışmaz: protokolü kaldırmaz ('http: //'). – Wrikken

1

bu deneyin:

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

bu zayıf bir regex - bu doğrulamaz dize, ancak zaten bir url olduğunu varsayar ve ilk sözcüğü alır, ilk eğik çizgiye kadar, protokolü göz ardı ederken. örneğin, ilk yakalanan gruptaki alanı görünümü elde etmek için: Bir bonus olarak

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

, aynı zamanda ilk ? kadar yakalar, bu nedenle beklendiği gibi url google.com?hello=world çalışacaktır.

13

Bir normal ifadeye alternatif olarak, System.Uri sınıfının dizeyi sizin için ayrıştırmasına izin verebilirsiniz. Dizenin bir şema içerdiğinden emin olmalısın.

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; 

Bu çözüm aynı zamanda herhangi bir bağlantı noktası numaralarını filtreler ve IPv6 onun kanonik forma adresleri dönüştürür.

+1

Yanıtlarınız da geçerli görünüyor. – Neutralizer

+1

"http: // blabla" için çalışmıyor, bu –

+0

@AbdulSaboor'u nasıl ele alacağımızı düşünelim, ne bekliyorsunuz? URL, içinde boşluk bulunan bir ana bilgisayar adı ("blabla") içeriyor. Sadece "http: //" de geçersiz bir URL'dir. 'Uri' kurucusu geçerli bir URL bekliyor. –

İlgili konular