【问题标题】:Lua string.gsub with a hyphenLua string.gsub 带连字符
【发布时间】:2015-05-18 07:37:53
【问题描述】:

我有两个字符串 - 每个字符串都有很多行,如下所示:

value_1 = "DEFAULT-VLAN"
value_2 = "WAN"
data = "HOSTNAME = DEFAULT-VLAN"
result = string.gsub(data,value_1,value_2)
print(result)

结果:

data = "HOSTNAME = DEFAULT-VLAN"

当连字符(“-”)从它正在工作的值中删除时。 有没有简单的方法来解决这个问题?

谢谢!

【问题讨论】:

    标签: string lua gsub hyphen


    【解决方案1】:

    - 是 Lua 模式中的魔法字符。你需要逃避它。

    改变

    value_1 = "DEFAULT-VLAN"
    

    到:

    value_1 = "DEFAULT%-VLAN"
    

    【讨论】:

    • 为什么我会为此收到nilstring.find("evs%-admin%-loggedstatistics%.csv", "evs%-admin%-loggedstatistics%.csv")
    • @codingkapoor 这里的魔术字符用于模式,而不是文字字符串。删除string.find的第一个参数中的所有%
    【解决方案2】:

    这是因为string.gsub 采用类似于正则表达式的模式——它不进行“文字”替换;这意味着您需要在任何具有特殊含义的字符前面加上 % 来转义它们。

    需要为模式转义的特殊字符列表是:().+-*?[、@987654331 @、^$%。对于替换字符串,只有% 有特殊含义。有了这个,我们可以编写一个替换函数来清理输入。

    local function replace(str, what, with)
        what = string.gsub(what, "[%(%)%.%+%-%*%?%[%]%^%$%%]", "%%%1") -- escape pattern
        with = string.gsub(with, "[%%]", "%%%%") -- escape replacement
        return string.gsub(str, what, with)
    end
    

    然后你可以:

    result = replace(data, value_1, value_2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      相关资源
      最近更新 更多