问题描述
我对 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
有效,但有没有办法不为每个组创建变量?
解决方法
最简单的方法是将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')