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

出于某些原因,只有开放和关闭括号无法正常工作。

RequestEncoded = string.gsub(RequestEncoded, '<', ' ')
RequestEncoded = string.gsub(RequestEncoded, '>', ' ')
RequestEncoded = string.gsub(RequestEncoded, '"', ' ')
RequestEncoded = string.gsub(RequestEncoded, '\'', ' ')
RequestEncoded = string.gsub(RequestEncoded, '\\', ' ')
--  RequestEncoded = string.gsub(RequestEncoded, '(', ' ') 无法成功
--  RequestEncoded = string.gsub(RequestEncoded, ')', ' ')
--  RequestEncoded = string.gsub(RequestEncoded, "\x28", " ") --无法成功
--  RequestEncoded = string.gsub(RequestEncoded, "\x29", ' ')
--  RequestEncoded = string.gsub(RequestEncoded, '\050', ' ') --无法成功
--  RequestEncoded = string.gsub(RequestEncoded, '\051', ' ')
点赞
用户3832970
用户3832970

是 Lua 模式中形成捕获组的特殊字符。当它们在方括号 [...] 外部时,您需要转义它们以匹配字面括号。您需要用 % 转义它们。

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

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

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

请注意,这里的 () 在括号表达式中,不需要转义。

参见 Lua patterns 文档:

一些字符,称为魔法字符,在模式中使用时具有特殊含义。这些魔法字符是

( ) . % + - * ? [ ^ $

2018-09-19 07:36:06