我如何为 gmatch 使用多个模式

How do I use more then one pattern for gmatch

您好,我正在尝试从文本文件中获取一些数据并将其放入 table。 我不确定如何在做我想做的事情的同时添加多个模式,我知道这个模式本身 %a+ 找到字母而 %b{} 找到括号,但我不确定如何将它们组合在一起以便我找到字母作为键,方括号作为值,并将它们放入我可以使用的 table 中。

文本文件:

left = {{0,63},{16,63},{32,63},{48,63}}
right = {{0,21},{16,21},{32,21},{48,21}}
up = {{0,42},{16,42},{32,42},{48,42}}
down = {{0,0},{16,0},{32,0},{48,0}}

代码:

local function get_animations(file_path)
local animation_table = {}
local file = io.open(file_path,"r")
local contents = file:read("*a")
for k, v in string.gmatch(contents, ("(%a+)=(%b{})")) do -- A gets words and %b{} finds brackets
    animation_table[k] = v
    print("key : " .. k.. " Value : ".. v)
  end
file:close()

结束

get_animations("Sprites/Player/MainPlayer.txt")

这是有效的 Lua 代码,为什么不简单地执行它呢?

left = {{0,63},{16,63},{32,63},{48,63}}
right = {{0,21},{16,21},{32,21},{48,21}}
up = {{0,42},{16,42},{32,42},{48,42}}
down = {{0,0},{16,0},{32,0},{48,0}}

如果不想要globals中的数据,用字符串库转成

return {
    left = {{0,63},{16,63},{32,63},{48,63}},
    right = {{0,21},{16,21},{32,21},{48,21}},
    up = {{0,42},{16,42},{32,42},{48,42}},
    down = {{0,0},{16,0},{32,0},{48,0}},
}

在你执行它之前。

如果您坚持要解析该文件,您可以对每一行使用类似这样的内容:

local line = "left = {{0,63},{16,63},{32,63},{48,63}}"
print(line:match("^%w+"))
for num1, num2 in a:gmatch("(%d+),(%d+)") do
  print(num1, num2)
end

这应该足以让您入门。当然,您不会打印这些值,而是将它们放入 table.