在 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