Lua gsub chars '(' и ')' терпит неудачу - PullRequest
0 голосов
/ 19 сентября 2018

По какой-то причине не работают только открывающие и закрывающие скобки, все остальные в порядке.

RequestEncoded = string.gsub(RequestEncoded, '<', ' ')
RequestEncoded = string.gsub(RequestEncoded, '>', ' ')
RequestEncoded = string.gsub(RequestEncoded, '"', ' ')
RequestEncoded = string.gsub(RequestEncoded, '\'', ' ')
RequestEncoded = string.gsub(RequestEncoded, '\\', ' ')
--  RequestEncoded = string.gsub(RequestEncoded, '(', ' ') keeps failing
--  RequestEncoded = string.gsub(RequestEncoded, ')', ' ')
--  RequestEncoded = string.gsub(RequestEncoded, "\x28", " ") --keeps failing
--  RequestEncoded = string.gsub(RequestEncoded, "\x29", ' ')
--  RequestEncoded = string.gsub(RequestEncoded, '\050', ' ') --keeps failing
--  RequestEncoded = string.gsub(RequestEncoded, '\051', ' ')

1 Ответ

0 голосов
/ 19 сентября 2018

) и ( - это специальные символы, которые образуют группу захвата в шаблоне Lua.

Вам необходимо экранировать их, когда они находятся за пределами квадратных скобок, [...], чтобы соответствовать буквальным скобкам,Вам нужно сбежать от них с %.

string.gsub(RequestEncoded, '%(', ' ')
string.gsub(RequestEncoded, '%)', ' ')

Однако, так как вы используете один и тот же шаблон замены во всех последующих gsub вызовах, вы можете упростить свой код до

RequestEncoded = string.gsub(RequestEncoded, '[<>"\'\\()]', ' ')

Обратите внимание, что здесь, ()находятся внутри выражения в скобках и не нуждаются в экранировании.

См. Шаблоны Lua Документы:

Некоторые символы, называемые магическими символами, имеют специальные значения при использовании вшаблон.Магические персонажи:

( ) . % + - * ? [ ^ $

...