Lua字符串.gsub与连字符

我有两个字符串 - 每个字符串都有许多类似下面的行:

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"

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

谢谢!

点赞
用户1009479
用户1009479

在 Lua 的模式中, - 是一个特殊字符,需要进行转义。

value_1 = "DEFAULT-VLAN"

更改为:

value_1 = "DEFAULT%-VLAN"
2015-03-16 08:44:22
用户984230
用户984230

这是因为 string.gsub 接受类似于正则表达式(Regex)的模式 - 它不进行“字面”替换。这意味着您需要在具有特殊含义的任何字符前加上 % 进行转义。

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

local function replace(str, what, with)
    what = string.gsub(what, "[%(%)%.%+%-%*%?%[%]%^%$%%]", "%%%1") -- 转义模式
    with = string.gsub(with, "[%%]", "%%%%") -- 转义替换
    return string.gsub(str, what, with)
end

然后您可以执行以下操作:

result = replace(data, value_1, value_2)
2015-03-31 22:49:20