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)
我有两个字符串 - 每个字符串都有很多行,如下所示:
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)