Lua gsub字符'('和')'失败

时间:2018-09-19 07:27:59

标签: 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', ' ')

1 个答案:

答案 0 :(得分:5)

)(是特殊字符,它们以Lua模式构成捕获组。

当它们在方括号[...]之外时,您需要对它们进行转义,以匹配文字括号。您需要使用%对其进行转义。

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

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

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

请注意,()在方括号表达式内,不需要转义。

请参阅Lua patterns文档:

  

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

     

( ) . % + - * ? [ ^ $