我试图匹配任何以::结尾的if语句,并将其替换为' if(condition)然后'。
例如:
if (x) ::
应替换为
if (x) then
我使用string.gsub
来实现这一目标,但似乎我的模式并不正确。以下代码仅匹配一个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
]]
我不确定我做错了什么。有人可以帮忙吗?
答案 0 :(得分:3)
使用code:gsub("(if.-)::", "%1 then")
;请注意使用-
代替+
因为它使重复“非贪婪”并且它将捕获最小数量的“任何字符”。原始模式中的.+
将所有内容匹配到行尾,然后回溯直到找到::
,但它只找到最后一个;这就是为什么你只能换一个。
使用(if.-)::
生成您期望的输出:
if (x) then
end
if (y) then
end