如何从URL中提取域名

5
我需要从Lua字符串变量中提取URL(one.two.three.four.five)的域名(four.five)。我似乎找不到在Lua中完成此操作的函数。
编辑:
当URL传递给我的时候,其中的http已被剥离。所以,一些例子如下:
a) safebrowsing.google.com 
b) i2.cdn.turner.com 
c) powerdns.13854.n7.nabble.com 

所以我的结果应该是:
a) google.com
b) turner.com
c) nabble.com

1
这是一篇旧帖子,但也许这是一个有用的提示:请记住,在某些领域,最后两个段不是有用的,例如在英国,很多域名以_.co.uk_结尾。 - P.J.Meisch
3个回答

7
这应该可以运行:
local url = "foo.bar.google.com"
local domain = url:match("[%w%.]*%.(%w+%.%w+)")
print(domain)       

输出结果:google.com

模式[%w%.]*%.(%w+%.%w+)查找从结尾开始的第二个点.后面的内容。


1
使用 url:match("[%w%-%.]*%.([%w%-]+%.%w+)")) 允许 URL 中包含连字符。 - forrestmid

5
local url = "http://foo.bar.com/?query"
print(url:match('^%w+://([^/]+)')) -- foo.bar.com

这个模式'^%w+://([^/]+)'的意思是:从行首开始,取 %w+ 一个或多个字母数字字符(这是协议),然后是 ://,接着 [^/]+ 1 个或多个非斜杠字符,并将这些字符作为结果返回(捕获)。

我需要从右到左开始移动,因为我不知道url的长度会是多少...可能是one.two.three或one.two.three.four或one.two.three.four.five。在其他语言中,我通过从右到左计算句点并提取从右边第二个句点开始的字符串来完成它。我不知道如何在lua中实现这一点。 - Xi Vix
2
请提供您正在尝试解析的URL示例(最好是几个)。 - Paul Kulchenko
当URL传递到我这里时,HTTP内容已经被剥离。因此,一些例子包括:a)safebrowsing.google.com b)i2.cdn.turner.com c)powerdns.13854.n7.nabble.com... 所以我的结果应该是:a)google.com,b)turner.com,c)nabble.com。 - Xi Vix

0

使用Paul的答案提取类似1.2.3.4.4.5的域名。

本地网址 = "http://foo.bar.com/?query" 本地域名 = 网址:match('^%w+://([^/]+)'))

接下来使用"split"方法构建部分数组。

http://lua-users.org/wiki/SplitJoin

像这样

本地 arr = split(domain, '%.') --转义点因为它是“模式”的一部分

接下来,您可以使用最后两个:arr[#arr],arr[#arr-1]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接