Lua string.gsub用连字符

时间:2015-03-16 08:41:40

标签: string lua gsub 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"

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

谢谢!

2 个答案:

答案 0 :(得分:10)

-是Lua模式中的神奇角色。你需要逃脱它。

更改

value_1 = "DEFAULT-VLAN"

为:

value_1 = "DEFAULT%-VLAN"

答案 1 :(得分:1)

这是因为string.gsub采用类似于Regex的模式 - 它不进行“文字”替换;这意味着您需要为%添加具有特殊含义的任何字符作为前缀。

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

%

然后你可以:

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