【问题标题】:how to escape a variable in Lua如何在 Lua 中转义变量
【发布时间】:2011-10-06 01:25:55
【问题描述】:

有没有办法在 Lua 中转义整个变量?喜欢:

local blah = some_pattern
string.gsub(blah, "-", "%-")

变量“blah”发生了变化,并在另一个模式匹配的其他地方使用。每当“blah”中有一个魔术字符时,在其他地方完成的第二个模式匹配就会失败。

所以我至少需要在“blah”中处理各种魔法字符的转义。

提前致谢!

【问题讨论】:

    标签: escaping lua pattern-matching


    【解决方案1】:

    有点不清楚您在这里要求什么:一种在设置变量值时调用转义函数的方法,或者如何转义字符串以进行模式匹配。

    变量只是一个值的存储。当设置局部变量时,您不能导致发生一般操作。因此,如果您更改 blah 的值,则由您决定是否再次正确转义字符串。

    如果您要询问如何转义字符串以进行模式匹配,应该是这样的:

    blah = blah:gsub(blah, "([...])", "%%%1")
    

    ... 是您需要转义的字符列表。 Lua 参考手册有一个您可以使用的列表。请注意,由于这是一个模式,这些字符必须在此处转义。

    【讨论】:

      【解决方案2】:

      最简单的方法是转义所有标点符号,不用担心魔术字符:

      newpattern = string.gsub(pattern, "%p", "%%%1")
      

      【讨论】:

        【解决方案3】:

        使用this function:

        local escape_lua_pattern
        do
          local matches =
          {
            ["^"] = "%^";
            ["$"] = "%$";
            ["("] = "%(";
            [")"] = "%)";
            ["%"] = "%%";
            ["."] = "%.";
            ["["] = "%[";
            ["]"] = "%]";
            ["*"] = "%*";
            ["+"] = "%+";
            ["-"] = "%-";
            ["?"] = "%?";
          }
        
          escape_lua_pattern = function(s)
            return (s:gsub(".", matches))
          end
        end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-24
          • 2021-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-05
          相关资源
          最近更新 更多