Parsing 解析Lua中的字符串

Parsing 解析Lua中的字符串,parsing,lua,Parsing,Lua,在Lua中,我发现了很多以逗号分隔字符串的方法,但这并不是我想要的。我需要能够执行以下操作:我将参数ABC作为字符串存在,并且我需要能够仅提取a,B,以及C。我该怎么做?我一直希望这样的事情能奏效: x = tostring(ABC) x[1] x[2] x[3] 这很容易。只需迭代 (假设您使用的是Lua的5.1版) 代码: 输出: 或者,正如评论中所说: for s in s:gmatch '.' do print(s) end 如果您只想获取索引的子字符串,这在大多数Lua版本

在Lua中,我发现了很多以逗号分隔字符串的方法,但这并不是我想要的。我需要能够执行以下操作:我将参数
ABC
作为字符串存在,并且我需要能够仅提取
a
B
,以及
C
。我该怎么做?我一直希望这样的事情能奏效:

x = tostring(ABC)
x[1]
x[2]
x[3]

这很容易。只需迭代

(假设您使用的是Lua的5.1版)


代码:

输出:



或者,正如评论中所说:

for s in s:gmatch '.' do print(s) end

如果您只想获取索引的子字符串,这在大多数Lua版本中都应该适用:

x = 'ABC'
print (string.sub(x, 1, 1))  -- 'A'
print (string.sub(x, 2, 2))  -- 'B'
print (string.sub(x, 3, 3))  -- 'C'
在Lua 5.1之后的版本中,根据此,您可以执行以下操作:

getmetatable('').__index = function(str,i) return string.sub(str,i,i) end

x = 'ABC'
print (x[1])  -- 'A'
print (x[2])  -- 'B'
print (x[3])  -- 'C'
还可以为字符串设置调用元方法:

getmetatable(“”)。\uuuu call=string.sub

那么这就行了:

for i=1,4 do
        print(i,x(i),x(i,i))
end

在不混淆元表的情况下:

function getCharacters(str)
local x = {}
for i=1, str:len(), 1 do
table.insert(x, str:sub(i, i))
end
return x
end

使用此函数,无论字符串有多长,都会有一个表中填充了它的字符:)

有固定格式吗?也就是说,它总是三个字符吗?还是有某种划界的性质?还有,您使用的是什么版本的Lua?最好为字符串保留旧的
\uu索引
元方法:
函数(str,i)返回类型(i)=“number”和str:sub(i,i)或str[i]end
在我之前的评论中
str[i]
应替换为
string[i]
为避免堆栈溢出:-)或更简单:
用于s:gmatch.”中的s。请务必打印结束
另请参见
for i=1,4 do
        print(i,x(i),x(i,i))
end
function getCharacters(str)
local x = {}
for i=1, str:len(), 1 do
table.insert(x, str:sub(i, i))
end
return x
end