如何编写 Lua 模式将字符串(嵌套数组)转换为实际数组?

how to write a Lua pattern to convert string (nested array) into a real array?

我想把一个字符串转成一个数组(游戏中的小地图,有坐标,颜色等等),字符串代表一个嵌套的数组,不知道怎么办。我想在第一个 { 之后打开一个数组,然后在每个 { 之后打开一个数组,然后读取 key/value 直到 } :

function stringToArray()
    local Array = {}
    local txt = "{ {Group = 123, Pos = 200}, {Group = 124, Pos = 205} }"
    for str in string.gmatch(txt, .....
end

因为该字符串实际上是有效的 lua 语法,您可以使用 load()

简单地执行它

例如

local txt = "{ {Group = 123, Pos = 200}, {Group = 124, Pos = 205} }"
local Array = load("return " .. txt)()
print(Array[1].Group) --prints 123

注意:对于 lua 版本 5.1 或更低版本,它是函数 loadstring()

没有像 load() 这样可能被沙盒化的函数
你必须解析字符串并构造(key/value 对)你想要的东西。
进一步 decisions/conditions 和分析的好主意可能是
计算不需要构建的内容...

local txt = "{ {Group = 123, Pos = 200}, {Group = 124, Pos = 205} }"
local _, lcurlies = txt:gsub('%{','')
local _, rcurlies = txt:gsub('%}','')
local _, commas = txt:gsub(',','')
local _, spaces = txt:gsub('%s','')
local _, equals = txt:gsub('=','')

print(lcurlies,rcurlies,commas,spaces,equals)
-- Puts out: 3  3   3   13  4