首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从URL中提取顶级域的Regex

从URL中提取顶级域的Regex
EN

Stack Overflow用户
提问于 2017-07-28 18:31:43
回答 1查看 6.8K关注 0票数 1

我想从URL中提取顶级域:日志如下所示:

代码语言:javascript
复制
<182>Jul 28 13:52:34 PROXYSQUID1 logger: 1501249953.155      0 192.168.4.27 TCP_MISS/503 2408 POST http://xxxxx.ddns.net:xxx/xxxxx - DIRECT/xxx.xx.x.xx text/html

我只想获得顶级域名:

代码语言:javascript
复制
ddns

我试过这个正则表达式

代码语言:javascript
复制
([\da-z\.-]+)\.([a-z\.])

但我有

代码语言:javascript
复制
xxxxx.ddns
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-28 18:41:21

你有点误解了这里的话..。TLD (顶级域名)是指域名的最后一段或紧跟在“点”符号之后的部分。(例如:.com.net等)

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

我已经为您的问题编辑了Daveo's answer,因此匹配将返回给第一个捕获组:

代码语言:javascript
复制
(?:[-a-zA-Z0-9@:%_\+~.#=]{2,256}\.)?([-a-zA-Z0-9@:%_\+~#=]*)\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)

下面是一个演示:https://regex101.com/r/x2luiO/1

解释:

  • (?:[-a-zA-Z0-9@:%_\+~.#=]{2,256}\.)? -这第一部分将得到所有在你的SLD (子域)之前。
  • ([-a-zA-Z0-9@:%_\+~#=]*) -这是您的捕获组(应该返回域)
  • \.[a-z]{2,6} -这将匹配TLD (如果您也想捕获)
  • \b(?:[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*) -这是regex的其余部分,应该与端口和/或URL (/example/page/)的其余部分匹配。

另外,如果您使用SLD和ccTLD (Country CcTLD)‘组合体’测试一个域,那么这个正则表达式将不匹配,例如:.co.uk.co.it都是商业和一般网站域的末尾,然而,它们都将返回co作为SLD。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45380207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档