I have two strings - each string has many lines like the following:
value_1 = "DEFAULT-VLAN"
value_2 = "WAN"
data = "HOSTNAME = DEFAULT-VLAN"
result = string.gsub(data,value_1,value_2)
print(result)
Result:
data = "HOSTNAME = DEFAULT-VLAN"
When the hyphen ("-") is deleted from the value it is working. Is there an easy way to solve this?
Thanks!
-
is a magic character in Lua patterns. You need to escape it.
Change
value_1 = "DEFAULT-VLAN"
to:
value_1 = "DEFAULT%-VLAN"
This is because string.gsub
takes a pattern similar to Regex—it does not do a "literal" replacement; this means you need to prefix any characters that have a special meaning with %
to escape them.
A list of special characters that need escaping for the pattern are: (
, )
, .
, +
, -
, *
, ?
, [
, ]
, ^
, $
, and %
. For the replacement string, only %
has a special meaning. With this, we can write a replace function that sanitizes the inputs.
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
And then you can:
result = replace(data, value_1, value_2)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With