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.
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(“惰性”)量词。
我不知道如何获得 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.
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(“惰性”)量词。