2017-07-28 115 views
0

我想提取從URL頂級域提取頂級域名: 日誌是這樣的:正則表達式來從URL

<182>Jul 28 13:52:34 PROXYSQUID1 logger: 1501249953.155  0 192.168.4.27 TCP_MISS/503 2408 POST http://xxxxx.ddns.net:1220/is-ready - DIRECT/154.68.5.134 text/html 

我想只有頂級域名:

ddns 

我想這正則表達式

([\da-z\.-]+)\.([a-z\.]) 

但我得到

xxxxx.ddns 

誰能幫我解決這個問題。

感謝

回答

0

你有種誤以爲這裏的話...一個TLD(頂級域名)是指一個域名的最後一段,或者「點」符號後面緊跟着的部分。 (例如:.com,.net等)

您要搜索的是second level domain(或SLD)。

我已經編輯Daveo's answer你的問題,所以比賽將返回到第一個捕獲組:

(?:[[email protected]:%_\+~.#=]{2,256}\.)?([[email protected]:%_\+~#=]*)\.[a-z]{2,6}\b(?:[[email protected]:%_\+.~#?&\/\/=]*) 

這裏是一個演示:https://regex101.com/r/x2luiO/1

說明:

  • (?:[[email protected]:%_\+~.#=]{2,256}\.)? - 這第一部分將得到EV在你的SLD之前(子域名)。
  • ([[email protected]:%_\+~#=]*) - 這是您的捕獲組(其中應返回域)
  • \.[a-z]{2,6} - 這將匹配的TLD(如果你也想捕捉)
  • \b(?:[[email protected]:%_\+.~#?&\/\/=]*) - 這是正則表達式的其餘部分,它應該與端口和/或URL的其餘部分相匹配(/example/page/)。

這也是很好的點,這個正則表達式不匹配,如果你正在測試一個域與SLD和ccTLD(國家代碼頂級域名)「組合」,例如:.co.uk.co.it,都是剛結束一個商業和一般網站的域名,但是,兩者都將返回co作爲SLD。

+0

它的工作,謝謝 –

+0

@ ZakariaMamai沒問題!另外,檢查編輯。 – Mateus