将lua字符串拆分成单个字符。

我只找到了关于我所寻找的内容的一个相关问题:按字符数量拆分字符串,但它对我没什么用。

我有一个字符串变量,是由三个数字组成的(可以是从000到999)。我需要将每个数字(字符)分离出来,并将它们放入一个表格中。

我正在为一个使用lua的游戏模组编程,它有一些额外的函数。如果你能帮我使用 http://wiki.multitheftauto.com/wiki/Split 来完成它,就太棒了,但任何其他方式也可以。

先感谢您。

点赞
用户513763
用户513763

纠正为 OP 想询问的内容:

如果只是将一个 3 位数拆成三个数字,那就更简单了:

s='429'
c1,c2,c3=s:match('(%d)(%d)(%d)')
t={tonumber(c1),tonumber(c2),tonumber(c3)}

针对“如何将由多组 3 位数字组成的长字符串拆分”这个问题的回答:

这很简单。您可以查看参考手册中的gmatch函数

s="123456789"
res={}
for num in s:gmatch('%d%d%d') do
    res[#res+1]=tonumber(num)
end

或者,如果您不喜欢循环:

res={}
s:gsub('%d%d%d',function(n)res[#res+1]=tonumber(n)end)
2012-07-13 14:15:12
用户277826
用户277826

我一直在寻找这样的东西,但是避免循环,并希望它是一个一行代码的东西。最终,我从lua-users wiki: Split Join找到了这个例子:

fields = {str:match((str:gsub("[^"..sep.."]*"..sep, "([^"..sep.."]*)"..sep)))}

...这正是我想要的语法 - 一行代码,返回一个表 - 但是,我真的不明白发生了什么 :/ 然而,经过一些试探,我成功地找到了使用这个习惯用语拆分字符的正确语法,它显然是:

fields = { str:match( (str:gsub(".", "(.)")) ) }

我猜,发生了什么是 gsub 基本上在每个字符 '.' 周围放置括号 '(.)' - 以便 match 将其视为单独的匹配单元,并将它们“提取”为单独的单元...但我仍然不明白为什么围绕 str:gsub(".", "(.)") 一块有额外的一对括号。

我用Lua5.1测试过这个:

str = "a - b - c"
fields = { str:match( (str:gsub(".", "(.)")) ) }
print(table_print(fields))

...其中的 table_print 是来自 lua-users wiki: TableSerialization 的;而这段代码打印:

"a"
" "
"-"
" "
"b"
" "
"-"
" "
"c"
2015-01-14 06:58:23