Lua 'plain' string.gsub

gsub, lua, lua-patterns, parsing, string

Solution

Taking from page 181 of Programming in Lua 2e:

The magic characters are:

( ) . % + - * ? [ ] ^ $

The character '%' works as an escape for these magic characters.

So, we can just come up with a simple function to escape these magic characters, and apply it to your input string (`lineB`):

function literalize(str)
    return str:gsub("[%(%)%.%%%+%-%*%?%[%]%^%$]", function(c) return "%" .. c end)
end

lineA = "footage/down/temp/cars_[100]_upper/cars_[100]_upper.exr"

lineB = literalize("footage/down/temp/cars_[100]_upper/")

newline = lineA:gsub(lineB, "")

print(newline)

Which of course prints: `cars_[100]_upper.exr`.

Problem

I've hit s small block with string parsing. I have a string like: ``` footage/down/temp/cars_[100]_upper/cars_[100]_upper.exr ``` and I'm having difficulty using gsub to delete a portion of the string. Normally I would do this ``` lineA = footage/down/temp/cars_[100]_upper/cars_[100]_upper.exr lineB = footage/down/temp/cars_[100]_upper/ newline = lineA:gsub(lineB, "") ``` which would normally give me 'cars_[100]_upper.exr' The problem is that gsub doesn't like the [] or other special characters in the string and unlike string.find gsub doesn't have the option of using the 'plain' flag to cancel pattern searching. I am not able to manually edit the lines to include escape characters for the special characters as I'm doing file a file comparison script. Any help to get from `lineA` to newline using `lineB` would be most appreciated.

Original source