I need to fix malformed pattern error

I want to replace % signs with a $. I tried doing an escape character () but that didn't work. I am using lua 5.1 and I get a malformed pattern error. (ends in '%') This is bugging me because I don't know how to fix it.

io.write("Search: ") search = io.read()
local query = search:gsub("%", "%25") -- Where I put the % sign.
query = query:gsub("+", "%2B")
query = query:gsub(" ","+")
query = query:gsub("/", "%2F")
query = query:gsub("#", "%23")
query = query:gsub("$", "%24")
query = query:gsub("@", "%40")
query = query:gsub("?", "%3F")
query = query:gsub("{", "%7B")
query = query:gsub("}","%7D")
query = query:gsub("[","%5B")
query = query:gsub("]","%5D")
query = query:gsub(">", "%3E")
query = query:gsub("<", "%3C")
local url = "https://www.google.com/#q=" .. query
print(url)

Output reads:

malformed pattern (ends with '%')

Upvotes: 1

Views: 2313

Answers (1)

lhf
lhf

Reputation: 72422

You need to escape % and write %%.

The idiomatic what to do this in Lua is to give a table to gsub:

local reserved="%+/#$@?{}[]><"
local escape={}
for c in reserved:gmatch(".") do
    escape[c]=string.format("%%%02X",c:byte())
end
escape[" "]="+"

query = search:gsub(".", escape)

Upvotes: 3

Related Questions