2010-07-24 20 views
7

Tôi cần phải phân tích cú pháp tên miền từ một chuỗi. Chuỗi có thể khác nhau và tôi cần miền chính xác.Sử dụng regex C# để phân tích cú pháp tên miền?

Ví dụ về Strings:

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

tôi cần nó trong các định dạng sau đây chỉ với tên miền, tld, và www, nếu áp dụng:

www.somename.de 

Làm thế nào để làm điều đó sử dụng C#?

+0

xin cảm ơn vì đã làm rõ hơn – Neutralizer

Trả lời

10

i đơn giản được sử dụng

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

vì bằng cách sử dụng này, bạn có thể chắc chắn.

2

Tôi đã kiểm tra ra Regular Expression Library, và có vẻ như một cái gì đó như thế này có thể làm việc cho bạn:

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

điều này không hoạt động – Neutralizer

+2

@Umair Ashraf - có lẽ bạn nên giải thích cách nó không hoạt động. Bạn có thể đưa ra một ví dụ về một dòng nó không phù hợp? – Kobi

+1

Làm thế nào nó không hoạt động: nó không loại bỏ giao thức ví dụ ('http: //'). – Wrikken

1

Hãy thử điều này:

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

đây là một regex yếu - nó không xác nhận chuỗi, nhưng giả định nó đã là một url, và nhận được từ đầu tiên, cho đến khi dấu gạch chéo đầu tiên, trong khi bỏ qua giao thức. Để có được cái nhìn miền ở nhóm bắt đầu, ví dụ:

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

Như một phần thưởng, nó cũng chụp cho đến khi ? đầu tiên, vì vậy url google.com?hello=world sẽ làm việc như mong đợi.

13

Là giải pháp thay thế cho giải pháp regex, bạn có thể cho phép lớp System.Uri phân tích cú pháp chuỗi cho bạn. Bạn chỉ cần đảm bảo chuỗi chứa một lược đồ.

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; 

Giải pháp này cũng lọc ra bất kỳ số cổng nào và chuyển đổi địa chỉ IPv6 sang dạng chuẩn.

+1

Câu trả lời của bạn có vẻ hợp lệ. – Neutralizer

+1

Không hoạt động cho "http: // blabla" bất kỳ ý tưởng nào về cách chúng tôi giả sử xử lý –

+0

@AbdulSaboor này, bạn mong đợi điều gì? URL chứa tên máy chủ có dấu cách trong đó ("blabla") làm cho tên máy chủ không hợp lệ. Chỉ cần "http: //" cũng là một URL không hợp lệ. Phương thức khởi tạo 'Uri' mong đợi một URL hợp lệ. –

Các vấn đề liên quan