Lua - 从任何 URL 格式中提取 IP 地址
2021-12-28 12:7:36
收藏:0
阅读:349
评论:2
有没有一种单一的 string:match 选项(或替代 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)
原文链接 https://stackoverflow.com/questions/70506850
点赞
stackoverflow用户11740758
当您构建包含 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
输出结果如下:
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
尝试使用模式项进行测试,在 url 前面添加更多文本。
例如...
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
= Lua 5.3 及以上 - %w
= Lua 5.1)
2021-12-28 15:10:31
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
你的示例已经几乎可以使用,你只需要去掉前面的
.+
,以防止吃掉 IP 前面多余的符号。local ip = s6:match("(%d+%.%d+%.%d+%.%d+)")
不过,这个模式还是比较松散的,会匹配到很多其他的由4个用点分割的数字组成的组合。你可能至少需要将每个数字组限制为3个数字。根据你要编写的脚本的重要性以及用户是否会试图通过输入错误的数据来攻击它来决定是否需要更健壮的模式。