所在位置:
首頁 >
營銷資訊 >
建站知識 > 如何使用正則表達式得到一個 URL 中的主域名,不用正則還有什么方法?
如何使用正則表達式得到一個 URL 中的主域名,不用正則還有什么方法?
時間:2023-02-11 15:21:01 | 來源:建站知識
時間:2023-02-11 15:21:01 來源:建站知識
用正則表達式精準抽取「主域名」是做不到的。
舉個例子,給你
http://www.sina.com.cn 這樣的 URL,你覺得主域名是什么呢?是
http://sina.com.cn 還是
http://com.cn 呢?
從常識來說,我們所希望得到的主域名,應(yīng)該是能夠清晰區(qū)分網(wǎng)站主體的域名后綴,比如上面的例子,就是
http://sina.com.cn。那域名中的哪段內(nèi)容才能區(qū)分網(wǎng)站主體呢?想一下就可以得出,是把整個域名從右往左分段,找到第一個「非公用」的部分。
首先,域名從右往左第一段是頂級域名(TLD),其中又分為通用頂級域名(gTLDs,如 .com、.edu、.org 等)和國家地區(qū)代碼頂級域名(ccTLDs,如 .cn、.uk、.hk 等)。ICANN 統(tǒng)一管理 gTLDs,并將 ccTLDs 下放給各種域名注冊機構(gòu)管理,例如國家地區(qū)頂級域名就交由不同國家地區(qū)來管理。中國大陸的域名管理機構(gòu)為著名的 CNNIC。我們再以 .cn 域名為例,下設(shè)一些預(yù)定義的「類別域名」如 .
http://com.cn、.
http://org.cn、.
http://edu.cn 以及「行政區(qū)域名」如 .
http://sh.cn、.
http://bj.cn,并且同時開放 .cn 域名的注冊。這意味著,我注冊一個叫 test 的域名,既可以是
http://test.com.cn 也可以是
http://test.cn,也就是說,那些域名的「公用部分」長度是不確定的。那么如果給我一個 URL 我是沒法以一個固定的方式來做截取的,而是必須知道這個 URL 的域名中哪個最長的后綴已經(jīng)被某個域名管理機構(gòu)預(yù)定義為公用的域名,然后剔除掉這部分才能找到第一個非公用的部分。
幸好,有
Public Suffix List 這樣的項目,你可以利用它提供的列表,來提取需要的「主域名」。目前的數(shù)據(jù)見:
http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1。另外,你可以看看這個列表:
Learn more about the Public Suffix List,看看都有誰在使用和維護這份數(shù)據(jù),以及他們都用來干嘛,比如:
- Firefox 用來做瀏覽器地址欄的反釣魚(高亮顯示正確的「主域名」)
- Firefox 和 Chrome 都用其來進行 Cookie 相關(guān)的域名檢測
- Chrome 用來判斷用戶在地址欄輸入的是否是一個域名
從這個頁面你也可以看到,你用 JavaScript 的話,可以直接使用
tld.js 這個項目來提取主域名。