Lua 模式匹配只返回第一个匹配项

Lua Pattern matching only returning first match

我不知道如何获得 Lua 到 return 特定模式匹配的所有匹配项。

我有以下正则表达式,它可以工作并且非常基础:

.*\n

这只是每行拆分一个长字符串。

这在Lua中的等价物是:

.-\n

如果您 运行 在正则表达式网站中针对以下文本进行上述操作,它将找到三个匹配项(如果使用全局标志)。

Hello
my name is
Someone

如果您不使用全局标志,它将 return 仅匹配第一个。这是 LUA 的行为;就好像它没有全局开关,只会 return 第一个匹配项。

我的确切代码是:

local test = {string.match(string_variable_here, ".-\n")}

如果我在上面的测试中运行它,例如,test将是一个只有一个项目(第一行)的table。我什至尝试使用捕获组,但结果是一样的。

我无法找到使它成为 return 所有匹配项的方法,有人知道这在 LUA 中是否可行吗?

谢谢,

您可以使用 string.gmatch(s, pattern) / s:gmatch(pattern):

This returns a pattern finding iterator. The iterator will search through the string passed looking for instances of the pattern you passed.

online Lua demo:

local a = "Hello\nmy name is\nSomeone\n"
for i in string.gmatch(a, ".*\n") do
  print(i)
end

注意 .*\n regex 等同于 .*\n Lua pattern。 Lua 模式中的 - 相当于 *? non-greedy(“惰性”)量词。