Lua gmatch 将捕获的组存储为数组

问题描述

我对 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')