Hello!
On Fri, Feb 27, 2015 at 11:26 PM, Huixian Hwrote:
>
> 我想到,问号是正则的一个标识,可能需要对它进行转义,可是当我的正则改成 "\?.*" 时,报错:invalid escape sequence near
> '"'
>
因为你的 Lua 代码直接嵌入在一个 nginx 字符串常量里,所以你需要同时考虑 nginx 字符串的转义规则和 Lua 字符串的转义规则。你可以写作
[[\\?.*]]
或者
"\\\\?.*"
关于此问题的更多细节可以参见
https://github.com/openresty/lua-nginx-module#special-pcre-sequences
为避免这样的麻烦,一般建议使用 content_by_lua_file,同时把 Lua 代码放在外部文件中,这样只需考虑 Lua
自身的转义规则就好了。(如果你留心邮件列表的历史的话,这个问题已然成为 FAQ 了,呵呵。)
我也有计划于近期实现 content_by_lua_block {} 配置语法,这样内联在 nginx.conf 中的 Lua
代码可以不必放在 nginx 字符串常量中,也可以避免双重逃逸的烦恼。
Regards,
-agentzh