我不知道如何让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
请注意,.*n
regex等效于.*n
Lua模式。Lua模式中的-
等价于*?
非贪婪("懒惰"(量词。