2010-07-24 8 views
7

मुझे एक स्ट्रिंग से डोमेन नाम पार्स करने की आवश्यकता है। स्ट्रिंग भिन्न हो सकती है और मुझे सटीक डोमेन की आवश्यकता है।किसी डोमेन नाम को पार्स करने के लिए सी # रेगेक्स का उपयोग करना?

स्ट्रिंग्स के उदाहरण:

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

मैं निम्न स्वरूप में इसकी जरूरत सिर्फ डोमेन नाम के साथ, tld, और www, यदि लागू हो:

www.somename.de 

मैं इसे कैसे करते हैं सी # का उपयोग कर?

+0

अरे इसे और अधिक स्पष्ट बनाने के लिए धन्यवाद – Neutralizer

उत्तर

10

मैं सरल

प्रयुक्त
Uri uri = new Uri("http://www.google.com/search?q=439489"); 
      string url = uri.Host.ToString(); 
      return url; 

क्योंकि यह आप वाकई कर सकते हैं का उपयोग करके।

2

मैं Regular Expression Library की जाँच की है, और यह कुछ इस तरह की तरह दिखता है आप के लिए काम कर सकते हैं:

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

नहीं यह – Neutralizer

+2

@Umair अशरफ काम नहीं कर रहा है - आपको शायद यह समझाया जाना चाहिए कि यह कैसे काम नहीं करता है। क्या आप उस लाइन का उदाहरण दे सकते हैं जो मेल नहीं खाता है? – Kobi

+1

यह कैसे काम नहीं करता है: यह प्रोटोकॉल को उदाहरण के लिए नहीं हटाता है ('http: //')। – Wrikken

1

इस प्रयास करें:

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

इस एक कमजोर regex है - यह मान्य नहीं करता स्ट्रिंग, लेकिन मान लीजिए कि यह पहले से ही एक यूआरएल है, और पहले स्लैश तक प्रोटोकॉल को अनदेखा करते हुए पहला शब्द प्राप्त करता है। उदाहरण के लिए, पहले कब्जा कर लिया समूह पर डोमेन झलक पाने के लिए:

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

एक बोनस के रूप में, यह भी पहले ? तक कैप्चर करता है, तो यूआरएल google.com?hello=world अपेक्षा के अनुरूप काम करेंगे।

13

रेगेक्स समाधान के विकल्प के रूप में, आप 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 अपने विहित प्रपत्र को संबोधित करते हैं बदल देता है।

+1

आपके उत्तर मान्य भी दिखते हैं। – Neutralizer

+1

"http: // blabla" के लिए काम नहीं कर रहा है किसी भी विचार को हम –

+0

@AbdulSaboor को संभालने का अनुमान लगाते हैं, आप क्या उम्मीद करेंगे? यूआरएल में एक होस्ट नाम है जिसमें एक स्पेस है ("ब्लब्ला") जो इसे अमान्य होस्ट नाम बनाता है। बस "http: //" भी एक अवैध यूआरएल है। 'उरी' कन्स्ट्रक्टर एक वैध यूआरएल की अपेक्षा करता है। –

संबंधित मुद्दे