我试图匹配任何以::结尾的 if 语句,并将其替换为“if (condition) then”。
例如:
if (x) ::
应替换为
if (x) then
我正在使用 string.gsub
来实现此目的,但似乎我的模式不正确。下面的代码只匹配一个 if 语句,但我希望它匹配所有的 if 语句。
local code = [[
if (x) ::
end
if (y) ::
end
]]
print(code:gsub("(if.+)::", "%1 then"))
--[[
what I wanted:
if (x) then
end
if (y) then
end
what I got:
if (x) ::
end
if (y) then
end
]]
我不确定我做错了什么。有人可以帮忙吗?
最佳答案
使用code:gsub("(if.-)::", "%1 then")
;请注意使用 -
而不是 +
,因为它使重复“非贪婪”,并且它将捕获最小数量的“任何字符”。原始模式中的 .+
匹配所有内容到行尾,然后回溯直到找到 ::
,但它只找到最后一个;这就是为什么您只能得到一个替代品。
使用 (if.-)::
生成您期望的输出:
if (x) then
end
if (y) then
end
关于string - 匹配到 "::"之前的模式不适用于 string.gsub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26089313/