Lua string.gsub用连字符

Ziz*_*nzu 6 string lua hyphen gsub

我有两个字符串 - 每个字符串有很多行,如下所示:

value_1 = "DEFAULT-VLAN"
value_2 = "WAN"
data = "HOSTNAME = DEFAULT-VLAN"
result = string.gsub(data,value_1,value_2)
print(result)
Run Code Online (Sandbox Code Playgroud)

结果:

data = "HOSTNAME = DEFAULT-VLAN"
Run Code Online (Sandbox Code Playgroud)

当连字符(" - ")从它正在工作的值中删除时.有没有简单的方法来解决这个问题?

谢谢!

Yu *_*Hao 10

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

更改

value_1 = "DEFAULT-VLAN"
Run Code Online (Sandbox Code Playgroud)

至:

value_1 = "DEFAULT%-VLAN"
Run Code Online (Sandbox Code Playgroud)

  • @codingkapoor此处的魔术字符用于模式,而不是文字字符串。删除string.find的第一个参数中的所有%。 (2认同)

Ash*_*igh 5

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

\n\n

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

\n\n
local function replace(str, what, with)\n    what = string.gsub(what, "[%(%)%.%+%-%*%?%[%]%^%$%%]", "%%%1") -- escape pattern\n    with = string.gsub(with, "[%%]", "%%%%") -- escape replacement\n    return string.gsub(str, what, with)\nend\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后你可以:

\n\n
result = replace(data, value_1, value_2)\n
Run Code Online (Sandbox Code Playgroud)\n