如何将字符串转换为表格?

我一直在尝试将一个字符串转换为表格,例如:

local stringtable = "{{"user123","Banned for cheating"},{"user124","Banned for making alt accounts"}}"

代码:

local table = "{{"user123","Banned for cheating"},{"user124","Banned for making alt accounts"}}"

print(table[1])

输出结果:

Line 3: nil

是否有一种方法将字符串转换为表格?如果有,请告诉我。

点赞
用户6632736
用户6632736

首先,你的 Lua 代码不起作用。你不能在一个由双引号包围的字符串中添加未转义的双引号。在 " 字符串中使用单引号( ')或在 '...' 中使用 ",或使用 HereDoc 语法以使用这两种引号类型,如下面的示例中所示。

其次,如果你的表结构不是非常严格的话,你的任务无法用正则表达式解决;即使是用 Lua 模式,也不足够:你将需要使用 Lua lrexlib 库中的 Perl-compatible 正则表达式。

第三,幸运的是,Lua 在运行时有一个 Lua 解释器可用:函数 loadstring。它返回一个函数,该函数在其参数字符串中执行 Lua 代码。你只需在表代码前加上 return,并调用返回的函数即可。

代码如下:

local stringtable = [===[
{{"user123","Banned for cheating"},{"user124","Banned for making alt accounts"}}
]===]

local tbl_func = loadstring ('return ' .. stringtable)
-- 如果 stringtable 不是有效的 Lua 代码,则 tbl_func 将为 nil:
local tbl = tbl_func and tbl_func() or nil

-- 测试:
if tbl then
    for _, user in ipairs (tbl) do
        print (user[1] .. ': ' .. user[2])
    end
else
    print '无法编译 stringtable'
end
2020-12-30 02:55:16