请求如下链接:
GET /getdata/search?keyword=%E7%
9A%96%E7%BB%B4%E9%AB%98%E6%96%B0&type=3&count=20&thispage=1 用unescape_uri()函数解码后,用ngx.re.find()进行正则匹配,其中正则表达式为(?i:(?:[\"'`´’‘]\s*?[^\w\s?]+\s*?[^\w\s]+\s*?[\"'`´’‘])),ngx.re.find() 函数返回结果是 from ,to = (6:9) 。但是我用正则检测工具结果是keyword字符串并不匹配该正则。我想知道ngx.re.find 匹配了什么,为什么用string.sub(value, from, to)打印不出该字符串。
example:
access_by_lua_block {
local args = ngx.req.get_uri_args() or ""
for k,v in pairs(args) do
local from ,to ,err = ngx.re.find(ngx.unescape_uri(v),[[(?i:(?:[\"'`´’‘]\s*?[^\w\s?]+\s*?[^\w\s]+\s*?[\"'`´’‘]))]],"imjo")
if from then
ngx.log(ngx.ERR,"request = ",ngx.var.request or ""," ; match value = ",string.sub(ngx.unescape_uri(v), from, to),"\n")
end
end
}
测试:curl http://192.168.1.43/?keyword=%E7%9A%96%E7%BB%B4%E9%AB%98%E6%96%B0
问题:这个地方的正则并不能匹配keyword的值,但是ngx.re.find()却是匹配成功