Lua的strings模組雖然有支援Regex,而Nginx的ngx.re模組效能上號稱更勝Lua的strings。
以下是解析URI的飯粒:
local request_uri = ngx.var.request_uri;
local iterator, err = ngx.re.gmatch(request_uri, "/([^/]\\w+)", "jo");
local encode = require("cjson").encode
if iterator then
while true do
local it, err = iterator()
if not it then break end
ngx.say(it[1] .. ', ', encode(it) .. "<br/>")
end
end
當URL為:http://localhost:8004/api/jemmy/tsai
則ngx.say印出的內容為:
api, {"0":"\/api","1":"api"}
jemmy, {"0":"\/jemmy","1":"jemmy"}
tsai, {"0":"\/tsai","1":"tsai"}
重點在ngx.re.gmatch
這裡,和Lua strings模組差別在,ngx.re還是保持有斜線為跳脫字元,而Lua則用%,而它最後一個參數j和o與效能有關。參考:
http://www.hangdaowangluo.com/archives/2731