Lua 模式匹配仅返回第一个匹配

Muc*_*ker 3 lua lua-patterns

我不知道如何让 Lua 返回特定模式匹配的所有匹配项。

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

.*\n
Run Code Online (Sandbox Code Playgroud)

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

Lua 中的等价物是:

.-\n
Run Code Online (Sandbox Code Playgroud)

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

Hello
my name is
Someone
Run Code Online (Sandbox Code Playgroud)

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

我的确切代码是:

local test = {string.match(string_variable_here, ".-\n")}
Run Code Online (Sandbox Code Playgroud)

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

我找不到一种方法让它返回所有匹配项,有谁知道这在 LUA 中是否可行?

谢谢,

Wik*_*żew 5

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

这将返回一个模式查找迭代器。迭代器将搜索传递的字符串,查找传递的模式的实例。

请参阅在线 Lua 演示

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

请注意,正则.*\n 表达式相当于.*\n Lua 模式-在 Lua 模式中相当于*?非贪婪(“惰性”)量词。