如何将字符串转换为 table?
How would I convert a string into a table?
我一直在尝试将字符串转换为 table 例如:
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
有没有什么方法可以将字符串转换为 table?如果是这样,请告诉我。
首先,您的 Lua 代码将不起作用。在用双引号分隔的字符串中不能有未转义的双引号。在 "
字符串中使用单引号 ('
),在 '...'
中使用 "
或使用 heredoc 语法来使用这两种类型的引号,就像我在下面的示例。
其次,你的任务不能用正则表达式解决,除非你的table结构非常死板;即使这样 Lua 模式也不够:您需要使用 Lua lrexlib 库中的 Perl 兼容正则表达式。
第三,幸运的是,Lua 在运行时有一个可用的 Lua 解释器:函数 loadstring。它 returns 一个在其参数字符串中执行 Lua 代码的函数。您只需要在 table 代码前添加 return
并调用返回的函数。
代码:
local stringtable = [===[
{{"user123","Banned for cheating"},{"user124","Banned for making alt accounts"}}
]===]
local tbl_func = loadstring ('return ' .. stringtable)
-- If stringtable is not valid Lua code, tbl_func will be nil:
local tbl = tbl_func and tbl_func() or nil
-- Test:
if tbl then
for _, user in ipairs (tbl) do
print (user[1] .. ': ' .. user[2])
end
else
print 'Could not compile stringtable'
end
我一直在尝试将字符串转换为 table 例如:
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
有没有什么方法可以将字符串转换为 table?如果是这样,请告诉我。
首先,您的 Lua 代码将不起作用。在用双引号分隔的字符串中不能有未转义的双引号。在 "
字符串中使用单引号 ('
),在 '...'
中使用 "
或使用 heredoc 语法来使用这两种类型的引号,就像我在下面的示例。
其次,你的任务不能用正则表达式解决,除非你的table结构非常死板;即使这样 Lua 模式也不够:您需要使用 Lua lrexlib 库中的 Perl 兼容正则表达式。
第三,幸运的是,Lua 在运行时有一个可用的 Lua 解释器:函数 loadstring。它 returns 一个在其参数字符串中执行 Lua 代码的函数。您只需要在 table 代码前添加 return
并调用返回的函数。
代码:
local stringtable = [===[
{{"user123","Banned for cheating"},{"user124","Banned for making alt accounts"}}
]===]
local tbl_func = loadstring ('return ' .. stringtable)
-- If stringtable is not valid Lua code, tbl_func will be nil:
local tbl = tbl_func and tbl_func() or nil
-- Test:
if tbl then
for _, user in ipairs (tbl) do
print (user[1] .. ': ' .. user[2])
end
else
print 'Could not compile stringtable'
end