簡體   English   中英

正則表達式從任何域提取域名

[英]Regular expression to extract domain name from any domain

我正在嘗試從C#中的字符串中提取域名。 您不一定要使用RegEx,但我們應該能夠從以下所有內容中提取yourdomain.com

yourdomain.com
www.yourdomain.com
http://www.yourdomain.com
http://www.yourdomain.com/
store.yourdomain.com
http://store.yourdomain.com
whatever.youdomain.com
*.yourdomain.com

此外,任何TLD都是可以接受的,所以用.net.org'co'uk等替換以上所有內容。

  1. 如果沒有方案存在(字符串中沒有冒號),請在“http://”前加上一個有效的URL。

  2. 將字符串傳遞給Uri構造函數

  3. 訪問Uri的主機屬性

現在你有了主機名。 你究竟認為給定主機名的“域名”究竟是一個值得商榷的問題。 我猜你不是簡單地說第一個點之后的所有東西。

不可能將'whatever.youdomain.com'等主機名與像'warwick.ac.uk'這樣的SLD中的域名區分開來。 事實上,考慮到一些注冊商努力開拓自己的利基市場,甚至還有一些關於什么是公共SLD的灰色區域。

一種常見的方法是維護一個由無關實體使用的SLD和其他后綴的大列表。 這就是Web瀏覽器為阻止不必要的公共cookie共享所做的事情。 一旦找到了公共后綴,就可以在主機名中添加一個最接近的前綴,用點分割,以獲得負責給定主機名的最高級實體,如果這是您想要的。 后綴列表是難以維護的,但你可以捎帶別人的努力

或者,如果您的應用程序具有執行此操作的時間和網絡連接,則可以開始嗅探有關主機名的信息。 例如。 它可以對主機名執行whois查詢,並繼續查看每個父項,直到獲得結果,這將是負責給定主機名的最低級實體的域名。

或者,如果所有這些工作太多,你可以嘗試切斷任何領先的'www'。 當下!

我建議你自己嘗試一下。 使用調節器和正則表達式備忘單。

http://sourceforge.net/projects/regulator/

http://regexlib.com/CheatSheet.aspx

還可以在編碼恐怖片時找到關於正則表達式的一些好信息。

正則表達式並不真正符合您對“ 任何 TLD”的要求,因為TLD的格式和數量非常大並且不斷變化。 如果您將范圍限制為:

(?<domain>[^\.]+\.([A-Z]+$|co\.[A-Z]$))

你會抓住.anything和.co.anything,我想這涵蓋了最現實的案例......

看看這個其他答案 它適用於PHP,但您可以輕松地從4-5行PHP中獲取正則表達式,您可以從后面的討論中受益(請參閱Alnitak的答案 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM