我不知道如何让 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 中是否可行?
谢谢,
您可以使用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 模式中相当于*?非贪婪(“惰性”)量词。
| 归档时间: |
|
| 查看次数: |
1327 次 |
| 最近记录: |