是否有一个string:match选项(或alternative Lua命令)可以确保无论提供的URL/IP地址格式如何,我都可以提取IP地址部分?
这是我到目前为止得到的最远的地址,但它没有显示完整的IP地址。
local s1 = "192.168.19.55"
local s2 = "http://192.168.19.55"
local s3 = "http://192.168.219.55:88"
local s4 = "http://192.168.19.55:88/index.html"
local s5 = "https://192.168.119.102/hello.php"
local s6 = "http://admin:password@192.168.19.55:88/hello.php"
local ip = s6:match(".+(%d+%.%d+%.%d+%.%d+)")
print(ip)
发布于 2021-12-28 12:27:22
您的例子已经起了很大作用,您只是不需要使用来自IP前面的额外符号的领导.+
。
local ip = s6:match("(%d+%.%d+%.%d+%.%d+)")
尽管如此,这个模式是相当松散的,并将匹配许多其他组的4个数字分开的点。您可能希望至少将每个数字组限制为3位。根据您正在编写的脚本的重要性来决定您是否需要更健壮的模式,以及人们是否会试图通过向它扔坏数据来利用它。
发布于 2021-12-28 15:10:31
当您使用ip‘构造一个表时,您可以遍历它。
示例(在:https://www.lua.org/cgi-bin/demo中测试)
local ips = {"192.168.19.55",
"http://192.168.19.55",
"http://192.168.219.55:88",
"http://192.168.19.55:88/index.html",
"https://192.168.119.102/hello.php",
"http://admin:password@192.168.19.55:88/hello.php"}
for k, v in pairs(ips) do
print(k, v:match("(.-%d+%.%d+%.%d+%.%d+%:-%d+)"))
end
...that拿出..。
1 192.168.19.55
2 http://192.168.19.55
3 http://192.168.219.55:88
4 http://192.168.19.55:88
5 https://192.168.119.102
6 http://admin:password@192.168.19.55:88
模式项.-
和%:-%d+
意味着:“单个字符类后面跟着'-',这也匹配类中的零个或多个字符的序列。”
来源:https://www.lua.org/manual/5.4/manual.html#6.4.1
玩模式项目,也用更多的文字在网址前测试它。
比如..。
local ips = {"GET 192.168.19.55",
"GET http://192.168.19.55",
"GET http://192.168.219.55:88",
"GET http://192.168.19.55:88/index.html",
"POST https://192.168.119.102/hello.php",
"POST http://admin:password@192.168.19.55:88/hello.php"}
for _, v in pairs(ips) do
print(v:match("(%g-%d+%.%d+%.%d+%.%d+%:-%d+)"))
end
(%g
=Lua5.3及以上- %w
=Lua5.1)
https://stackoverflow.com/questions/70506850
复制相似问题