带连字符的Lua string.gsub
我有两个字符串-每个字符串有许多行,如下所示:带连字符的Lua string.gsub,string,lua,gsub,hyphen,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" 从正在使用的值中删除连字符(“-”)时。 有没有简单的方法来解决这个问题 谢谢 -是Lua模式中的一个神奇角色。
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"
致:
这是因为
string.gsub
采用类似于Regex的模式,它不进行“文字”替换;这意味着您需要在任何具有特殊含义的字符前面加上%
以转义它们
模式需要转义的特殊字符的列表是:(
,)
,,+
,-
,*
,?
,[
,]
,
,$
,和
。对于替换字符串,只有%
具有特殊含义。有了这个,我们可以编写一个替换函数来清理输入
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)
为什么我会因此而得到nil
<代码>字符串.find(“evs%-admin%-loggedstatistics%.csv”,“evs%-admin%-loggedstatistics%.csv”)
@codingkapoor这里的魔术字符用于模式,而不是文字字符串。删除字符串第一个参数中的所有%
。查找。
result = replace(data, value_1, value_2)