Lua string.gsub 带连字符

Lua string.gsub with a hyphen

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

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"

当从值中删除连字符(“-”)时,它会起作用。 有解决这个问题的简单方法吗?

谢谢!

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

改变

value_1 = "DEFAULT-VLAN"

至:

value_1 = "DEFAULT%-VLAN"

这是因为 string.gsub 采用类似于 Regex 的模式——它不进行 "literal" 替换;这意味着您需要在任何具有特殊含义的字符前加上 % 前缀以转义它们。

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

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)