LUA:从给定的数字值生成唯一的 MAC
2021-7-16 15:32:30
收藏:0
阅读:130
评论:2
我正在尝试从给定的数字值生成唯一的 MAC id。数字的长度在1到5位之间。我已经将 MAC 表格格式化为从 MAC 的第一个值开始放置每个数字。
local MacFormat ={[1] = "0A:BC:DE:FA:BC:DE",[2] = "00:BC:DE:FA:BC:DE",[3] = "00:0C:DE:FA:BC:DE",[4] = "00:00:DE:FA:BC:DE",[5] = "00:00:0E:FA:BC:DE"}
local idNumbers = {[1] = "1",[2]="12",[3]="123",[4]="1234",[5]="12345"}
for w in string.gfind(idNumbers[3], "(%d)") do
print(w)
str = string.gsub(MacFormat[3],"0",tonumber(w))
end
print(str)
---输出33:3C:DE:FA:BC:DE
--- 期望输出12:3C:DE:FA:BC:DE
我已经尝试了多个模式,包括 *
、+
、.
,但都不起作用。
点赞
用户3832970
您可以动态构建模式和替换:
local MacFormat ={[1] = "0A:BC:DE:FA:BC:DE",[2] = "00:BC:DE:FA:BC:DE",[3] = "00:0C:DE:FA:BC:DE",[4] = "00:00:DE:FA:BC:DE",[5] = "00:00:0E:FA:BC:DE"}
local idNumbers = {[1] = "1",[2]="12",[3]="123",[4]="1234",[5]="12345"}
local p = "^" .. ("0"):rep(string.len(idNumbers[3])):gsub("(..)", "%1:")
local repl = idNumbers[3]:gsub("(..)", "%1:")
local str = MacFormat[3]:gsub(p, repl)
print(str)
-- => 12:3C:DE:FA:BC:DE
参见 在线 Lua 演示。
该模式是 "^" .. ("0"):rep(string.len(idNumbers[3])):gsub("(..)", "%1:")
:^
匹配字符串开始,然后是一串零(与 idNumbers
大小相同,参见 ("0"):rep(string.len(idNumbers[3]))
)跟随每对零后面都有一个 :
(:gsub("(..)", "%1:")
)。
替换是 idNumbers
项,并在每个第二个字符后插入一个冒号,使用 idNumbers[3]:gsub("(..)", "%1:")
。
在这种情况下,模式将是 ^00:0
,替换将是 12:3
。
在这里查看 完整演示。
2021-07-16 15:28:56
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
对于idNumbers[3]中的数字,执行以下循环: for w in string.gfind(idNumbers[3], "(%d)") do print(w) end 将w替换为数字后,使用数字替换MacFormat[3]中的0: str = string.gsub(MacFormat[3],"0",tonumber(w)) print(str)
你的循环主体和以下代码等效:
str = string.gsub("00:0C:DE:FA:BC:DE", "0",1) str = string.gsub("00:0C:DE:FA:BC:DE", "0", 2) str = string.gsub("00:0C:DE:FA:BC:DE", "0", 3)
所以
str
是"33:3C:DE:FA:BC:DE"
MacFormat[3]
没有被更改过,而gsub
的结果会在每一行重写。