string - 匹配到 "::"之前的模式不适用于 string.gsub

标签 string lua gsub lua-patterns

我试图匹配任何以::结尾的 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/

相关文章:

java - 如何设置公共(public)字符串的文本

c - 将 C 结构指针传递给 lua 脚本

lua - 在cmake中找不到带有find_package的Lua头文件

正则表达式删除单词,如果它在 R 中同时多次包含字母/特殊字符

python - python中的 ' '和 ""有什么区别?

mysql - 在 SQL 中按年份排序

java - 为什么这段代码使用 Math.pow 打印 "HELLO WORLD"?

c++ - Lua5.2嵌入C++

bash - awk、gsub、& 符号和意外扩展

ruby - 我将整数更改为字符串,但#gsub 只能识别 0-9