无效的转义序列 lua 正则表达式

Viv*_*vek 0 regex lua pcre nginx

我写了一个正则表达式来匹配下面的字符串类型,当我在正则表达式匹配器中在线检查它时,它按预期工作 -

"['432', '212']"

regex - "(\[)('([^']|'')*'), ('([^']|'')*')(])"

ngx.re.find(string, "\"(\[)('([^']|'')*'), ('([^']|'')*')(])\"", "jo")
Run Code Online (Sandbox Code Playgroud)

当我在 lua 块中使用它来匹配字符串时,它给了我无效的转义序列错误。我转义了双引号,并试图用 \ 转义正则表达式中的特殊字符,但问题仍然存在。任何指针都会有所帮助。谢谢!

cyc*_*ist 5

我会重申人们在评论中所说的话。您\[在正则表达式中使用过,它是一个带引号的字符串。在带引号的字符串中,反斜杠开始转义序列,但\[它是无效的转义序列(有关有效的转义序列,请参阅Lua 5.1 手册),因此 Lua 解析器抱怨它。Vanilla Lua 5.1 只是删除了反斜杠(这在这个正则表达式中会很糟糕),而 Lua 5.3 和 LuaJIT 抱怨它。

您可以通过使用另一个反斜杠"\\["将反斜杠转义来消除解析错误并确保反斜杠实际上插入到字符串中 – – 就像在 JavaScript 中使用RegExp构造函数时必须做的那样,或者通过使用长字符串,它不会解释转义序列 - [[\[]]. 如果使用长字符串,则还必须将\"正则表达式中的转义双引号替换为纯".