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"

【讨论】:

为什么我会为此收到nilstring.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 带连字符的主要内容,如果未能解决你的问题,请参考以下文章

Lua 字符串替换

lua语言的字符串替换函数的使用方法问题。

lua中怎么替换掉字符串中的$^特殊字符?

Lua字符串

Lua字符串

Lua学习九----------Lua字符串