Lua string.gsub 带连字符
Posted
技术标签:
【中文标题】Lua string.gsub 带连字符【英文标题】:Lua string.gsub with a hyphen 【发布时间】:2015-05-18 07:37:53 【问题描述】:我有两个字符串 - 每个字符串都有很多行,如下所示:
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"
当连字符(“-”)从它正在工作的值中删除时。 有没有简单的方法来解决这个问题?
谢谢!
【问题讨论】:
【参考方案1】:-
是 Lua 模式中的魔法字符。你需要逃避它。
改变
value_1 = "DEFAULT-VLAN"
到:
value_1 = "DEFAULT%-VLAN"
【讨论】:
为什么我会为此收到nil
? string.find("evs%-admin%-loggedstatistics%.csv", "evs%-admin%-loggedstatistics%.csv")
@codingkapoor 这里的魔术字符用于模式,而不是文字字符串。删除string.find
的第一个参数中的所有%
。【参考方案2】:
这是因为string.gsub
采用类似于正则表达式的模式——它不进行“文字”替换;这意味着您需要在任何具有特殊含义的字符前面加上 %
来转义它们。
需要为模式转义的特殊字符列表是:(
、)
、.
、+
、-
、*
、?
、[
、@987654331 @、^
、$
和 %
。对于替换字符串,只有%
有特殊含义。有了这个,我们可以编写一个替换函数来清理输入。
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)
【讨论】:
以上是关于Lua string.gsub 带连字符的主要内容,如果未能解决你的问题,请参考以下文章