Мне нужно исправить ошибку искаженного шаблона

#lua #gsub

#lua #gsub

Вопрос:

Я хочу заменить знаки% на $. Я попытался выполнить escape-символ (), но это не сработало. Я использую lua 5.1 и получаю ошибку искаженного шаблона. (заканчивается на ‘%’) Это беспокоит меня, потому что я не знаю, как это исправить.

 io.write("Search: ") search = io.read()
local query = search:gsub("%", "%") -- Where I put the % sign.
query = query:gsub(" ", "+")
query = query:gsub(" "," ")
query = query:gsub("/", "/")
query = query:gsub("#", "#")
query = query:gsub("$", "$")
query = query:gsub("@", "@")
query = query:gsub("?", "?")
query = query:gsub("{", "{")
query = query:gsub("}","}")
query = query:gsub("[","[")
query = query:gsub("]","]")
query = query:gsub(">", ">")
query = query:gsub("<", "<")
local url = "https://www.google.com/#q=" .. query
print(url)
  

Вывод считывает:

 malformed pattern (ends with '%')
  

Ответ №1:

Вам нужно выполнить экранирование % и записать %% .

Идиоматический способ сделать это в Lua — предоставить таблицу gsub :

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

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

Комментарии:

1. Спасибо, что помогли мне! 🙂