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



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

我有下面的正则表达式,它很有效,而且很基本:

.*n

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

这在Lua中的等价物是:

.-n

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

Hello
my name is
Someone

如果不使用全局标志,它将只返回第一个匹配项。这就是LUA的行为;就好像它没有全局切换,只会在第一场比赛中回归。

我的确切代码是:

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

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

我找不到一种方法让它返回匹配的所有出现,有人知道这在LUA中是否可能吗?

谢谢,

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

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

查看在线Lua演示:

local a = "Hellonmy name isnSomeonen"
for i in string.gmatch(a, ".*n") do
print(i)
end

请注意,.*nregex等效于.*nLua模式。Lua模式中的-等价于*?非贪婪("懒惰"(量词。

相关内容

最新更新