在 lua 5.1 中使用 string.gmatch 拆分字符串时包括空匹配
Include empty matches when using string.gmatch to split a string in lua 5.1
我有一个逗号分隔的输入字符串,需要支持空条目。所以像 a,b,c,,d
这样的字符串应该导致 table 有 5 个条目,其中第 4 个是空值。
一个简化的例子
str="a,b,c,,d"
count=0
for v in string.gmatch(str, '([^,]*)') do
count = count + 1
end
print(count)
这段代码输出
9
在Lua5.1中,虽然只有5个条目。
我可以将正则表达式中的 *
更改为 +
- 然后它会报告 4 个条目 a,b,c,d
而不是空条目。似乎这个行为在 Lua 5.2 中已经修复,因为上面的代码在 lua 5.2 中工作正常,但我不得不为 lua 5.1[=19= 找到解决方案]
我目前的实现
function getValues(inputString)
local result = {}
for v in string.gmatch(inputString, '([^,]*)') do
table.insert(result, v)
end
return result
end
关于如何修复有什么建议吗?
local str="a,b,c,,d"
local count=1
for value in string.gmatch(str, ',') do
count = count + 1
end
print(count)
如果你想获得这些值,你可以这样做
local function values(str, previous)
previous = previous or 1
if previous <= #str then
local comma = str:find(",", previous) or #str+1
return str:sub(previous, comma-1), values(str, comma+1)
end
end
您可以在文本后附加逗号并使用 ([^,]*),
模式获取所有值:
function getValues(inputString)
local result = {}
for v in string.gmatch(inputString..",", '([^,]*),') do
table.insert(result, v)
end
return result
end
输出:
a
b
c
d
我有一个逗号分隔的输入字符串,需要支持空条目。所以像 a,b,c,,d
这样的字符串应该导致 table 有 5 个条目,其中第 4 个是空值。
一个简化的例子
str="a,b,c,,d"
count=0
for v in string.gmatch(str, '([^,]*)') do
count = count + 1
end
print(count)
这段代码输出
9
在Lua5.1中,虽然只有5个条目。
我可以将正则表达式中的 *
更改为 +
- 然后它会报告 4 个条目 a,b,c,d
而不是空条目。似乎这个行为在 Lua 5.2 中已经修复,因为上面的代码在 lua 5.2 中工作正常,但我不得不为 lua 5.1[=19= 找到解决方案]
我目前的实现
function getValues(inputString)
local result = {}
for v in string.gmatch(inputString, '([^,]*)') do
table.insert(result, v)
end
return result
end
关于如何修复有什么建议吗?
local str="a,b,c,,d"
local count=1
for value in string.gmatch(str, ',') do
count = count + 1
end
print(count)
如果你想获得这些值,你可以这样做
local function values(str, previous)
previous = previous or 1
if previous <= #str then
local comma = str:find(",", previous) or #str+1
return str:sub(previous, comma-1), values(str, comma+1)
end
end
您可以在文本后附加逗号并使用 ([^,]*),
模式获取所有值:
function getValues(inputString)
local result = {}
for v in string.gmatch(inputString..",", '([^,]*),') do
table.insert(result, v)
end
return result
end
输出:
a
b
c
d