我想从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:xxx/xxxxx - DIRECT/xxx.xx.x.xx text/html我只想获得顶级域名:
ddns我试过这个正则表达式
([\da-z\.-]+)\.([a-z\.])但我有
xxxxx.ddns发布于 2017-07-28 18:41:21
你有点误解了这里的话..。TLD (顶级域名)是指域名的最后一段或紧跟在“点”符号之后的部分。(例如:.com,.net等)
您正在搜索的是second level domain (或SLD)。
我已经为您的问题编辑了Daveo's answer,因此匹配将返回给第一个捕获组:
(?:[-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。
https://stackoverflow.com/questions/45380207
复制相似问题