2012-05-16 131 views
1

我認爲正則表達式可能能夠實現這一點,如果不是,那麼字符串操作也是一個可行的解決方案。如何在查詢字符串值中查找域名

我需要打開以下輸入:

  1. "http://open.thumbshots.org/image.pxf?url=www.party.com"
  2. "http://www.xclicks.net/sc/ct.php?s=9971&l=http%3A//www.google.com/imgres%3F"
  3. "http://whos.amung.us/pingjs/?k=yvybju40twbs&t=Mudswimmer%3A%20Spam%20%26%20Crap%3A%20Http%3AUniversity.com%3A%20No%20Animals%20Allowed..&c=c&y=htt"

成以下輸出:

  1. "party.com"
  2. "google.com"
  3. "University.com"

我沒有試圖讓URL的主機名,我想第二個領域,一個在查詢字符串。

+0

採取這裏看看 [http://stackoverflow.com/questions/659887/get-url-parameters-from-a-string-in-net][1] [ 1]:http://stackoverflow.com/questions/659887/get-url-parameters-from-a-string-in-net –

+3

你可能已經選擇了第三個網址的更好的例子.... –

回答

1

,但必須至少包括正則表達式是有程度的不確定性,對我來說一切,但給你的三個輸入下面的代碼工作:

string[] urls = new string[] 
{ 
    "http://open.thumbshots.org/image.pxf?url=www.party.com", 
    "http://www.xclicks.net/sc/ct.php?s=9971&l=http%3A//www.google.com/imgres%3F", 
    "http://whos.amung.us/pingjs/?k=yvybju40twbs&t=Mudswimmer%3A%20Spam%20%26%20Crap%3A%20Http%3AUniversity.com%3A%20No%20Animals%20Allowed..&c=c&y=htt" 
}; 

foreach (var url in urls) 
{ 
    var result = HttpUtility.ParseQueryString(new Uri(url, UriKind.Absolute).Query); 

    foreach (string item in result) 
    { 
     string value = result.GetValues(item).Single(); 

     const string DomainNamePattern = "(?:www\\.|\\b)(?<domain>([a-z0-9]([-a-z0-9]*[a-z0-9])?\\.)+((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|(cat|com|coop|c[acdfghiklmnorsuvxyz])|d[ejkmoz]|(e[ceghrstu]|edu)|f[ijkmor]|(g[abdefghilmnpqrstuwy]|gov)|h[kmnrtu]|(i[delmnoqrst]|info|int)|(j[emop]|jobs)|k[eghimnprwyz]|l[abcikrstuvy]|(m[acdghklmnopqrstuvwxyz]|mil|mobi|museum)|(n[acefgilopruz]|name|net)|(om|org)|(p[aefghklmnrstwy]|pro)|qa|r[eouw]|s[abcdeghijklmnortvyz]|(t[cdfghjklmnoprtvwz]|travel)|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw]))"; 

     var match = Regex.Match(
      value, 
      DomainNamePattern, 
      RegexOptions.IgnoreCase); 

     if (match.Success) 
     { 
      string domain = match.Groups["domain"].Value; 

      Console.WriteLine(domain); 
     } 
    } 
} 

使用正則表達式從here調整。

如果你運行這個你會得到下面的輸出:

// party.com 
// google.com 
// University.com 
0

如果您的鏈接總是包含的URL查詢字符串鍵,那麼你可以通過 String url = Request.QueryString["url"].ToString(); 這個簡單的獲取,這將retrun url的值。

+0

如果你採取考慮到OP提供的三個輸入,你可以得出結論,你的假設是不正確的。 –

+0

是的,但首先他應該得到查詢字符串值,然後他可以簡單地使用正則表達式獲取值。 –

+0

這是'簡單'獲得與正則表達式的價值是問題:-)謝謝你的幫助。 –