无法使用string.gsub和匹配正则表达式“::”直到无法匹配的模式

我想要匹配任何以::结尾的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
]]

我不确定我做错了什么。有人能帮忙吗?

点赞
用户1442917
用户1442917

使用 code:gsub("(if.-)::", "%1 then");注意使用 - 而不是 +,因为它将重复匹配的字符数量设置最小。原始模式中的 .+ 匹配行末的所有内容,然后回溯直到找到 ::,但是它只能找到最后一个;这就是为什么你只会得到一个替换的原因。

使用 (if.-):: 生成您期望的输出:

if (x)  then

end

if (y)  then

end
2014-09-28 20:35:18