ngx.re.gmatch使用在content_by_lua与content_by_lua_file的问题

108 views
Skip to first unread message

kelo...@gmail.com

unread,
May 15, 2013, 6:49:07 AM5/15/13
to open...@googlegroups.com
hi,各位
  今天在用ngx.re.gmatch的时候遇到一个问题,不知道是不是正则写的不对。
  原数据: xxxxxx "partNum" : "2345678" xxxx
  要匹配出 "partNum" : "2345678" 这串
  我写的正则为:ngx.re.gmatch(data, [[\\"partNum"\s*:\s*"[0-9]+" ]], "u")
  这串代码在content_by_lua中是可以正确匹配,但如果换成content_by_lua_file就不行。
  各位帮忙看看如果要在content_by_lua_file中使用该正则该如何改,谢谢




kelo...@gmail.com

unread,
May 15, 2013, 7:34:30 AM5/15/13
to open...@googlegroups.com
最后用 ngx.escape_uri转一下,再用%22等去匹配搞定,不知道有没有不转的方法。

 

Lance

unread,
May 15, 2013, 11:29:43 PM5/15/13
to open...@googlegroups.com
这两种写法转义方式不一样, _file 需要少转义一层

Lance


2013/5/15 <kelo...@gmail.com>

 

--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 openresty...@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+...@googlegroups.com
归档: http://groups.google.com/group/openresty
官网: http://openresty.org/
仓库: https://github.com/agentzh/ngx_openresty
教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html
 
 

agentzh

unread,
May 16, 2013, 3:54:04 PM5/16/13
to openresty
Hello!

2013/5/15 kelo...@gmail.com:
如 Lance 所说,在外部 Lua 脚本文件里面是无需针对 nginx 字符串常量进行额外转义(毕竟你的 Lua 代码并没有放在一个
nginx 字符串常量里面)。

对于你的例子,直接把 Lua 代码写成

ngx.re.gmatch(data, [["partNum"\s*:\s*"[0-9]+"]], "u")

就可以了。

值得一提的是,如果你的正则表达式是常量(比如你这个例子里的),应当总 是启用正则编译缓存和 PCRE JIT 加速,可以提升性能,即

ngx.re.gmatch(data, [["partNum"\s*:\s*"[0-9]+"]], "ujo")

Best regards,
-agentzh
Reply all
Reply to author
Forward
0 new messages