Lua gmatch 将捕获的组存储为数组
Posted
技术标签:
【中文标题】Lua gmatch 将捕获的组存储为数组【英文标题】:Lua gmatch store captured groups as an array 【发布时间】:2021-07-20 00:09:46 【问题描述】:我对 Lua 比较陌生。对于gmatch
的每一个匹配,我想将捕获组结果放入一个数组中。
我的想法是,我将每个匹配项的所有捕获组作为一个数组,这样我就可以对这个数组进行操作,例如将每个捕获组转换为 int。
我将如何更改以下内容,使其打印出3
2
1
?
function split_ipv4(str)
for parts in str:gmatch('(%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?), ') do
print(parts[4])
end
end
split_ipv4('192.168.0.3, 192.168.0.2, 192.168.0.1')
将parts
更改为p1, p2, p3, p4
并打印p4
可行,但有没有办法不为每个组创建一个变量?
【问题讨论】:
【参考方案1】:最简单的方法是将parts
改为p1, p2, p3, p4
但在变量恐惧症的情况下:
function split_ipv4(str)
for addr in str:gmatch'%d%d?%d?%.%d%d?%d?%.%d%d?%d?%.%d%d?%d?' do
local parts = addr:match'(%d+)%.(%d+)%.(%d+)%.(%d+)'
print(parts[4])
end
end
split_ipv4('192.168.0.3, 192.168.0.2, 192.168.0.1')
【讨论】:
+1。感谢您的回答。我也想过这个想法,但是就像你说的那样,对于 IPv4,它并不比p1, p2, p3, p4
好多少。我想在 IPv6 的情况下会更好。
IPv6 没有被单一的 Lua 模式覆盖。以上是关于Lua gmatch 将捕获的组存储为数组的主要内容,如果未能解决你的问题,请参考以下文章