2017-07-28 72 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