Lua gsub chars'('和')'失败了

Hei*_*ock 2 lua gsub lua-patterns

出于某种原因,只有开放和关闭支架不会工作,其他所有都很好.

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', ' ')
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 5

)并且(是在Lua模式中形成捕获组的特殊字符.

当它们在方括号之外时,你需要逃避它们[...],以匹配字面括号.你需要逃避他们%.

string.gsub(RequestEncoded, '%(', ' ')
string.gsub(RequestEncoded, '%)', ' ')
Run Code Online (Sandbox Code Playgroud)

但是,由于您在所有后续gsub调用中使用相同的替换模式,因此可以将代码简化为

RequestEncoded = string.gsub(RequestEncoded, '[<>"\'\\()]', ' ')
Run Code Online (Sandbox Code Playgroud)

请注意,这里()是括号表达式内部,不需要转义.

请参阅Lua模式文档:

某些字符(称为魔术字符)在模式中使用时具有特殊含义.神奇的人物是

( ) . % + - * ? [ ^ $