• Openresty 学习笔记(二)Nginx Lua 正则表达式相关API


    ngx.re.match

    语法: captures, err = ngx.re.match(subject, regex, options?, ctx?, res_table?)

    环境: init_worker_by_lua*, set_by_lua*, rewrite_by_lua*, access_by_lua*, content_by_lua*, header_filter_by_lua*, body_filter_by_lua*, log_by_lua*, ngx.timer.*, balancer_by_lua*, ssl_certificate_by_lua*, ssl_session_fetch_by_lua*, ssl_session_store_by_lua*

    更多详解

    官方的DEMO

     local m, err = ngx.re.match("hello, 1234", "[0-9]+")
     if m then
         -- m[0] == "1234"
    
     else
         if err then
             ngx.log(ngx.ERR, "error: ", err)
             return
         end
    
         ngx.say("match not found")
     end

    从URL地址中获取域名,脚本:ngx-re-match.lua

        local m, err = ngx.re.match("http://www.tinywan.com/live", "(?<=://)[A-Za-z0-9.]+(?=/)")
        if m then
            -- m[0] == "1234"
            ngx.say(m[0])
            ngx.say(m[1])
        else
            if err then
                ngx.log(ngx.ERR, "error: ", err)
                return
            end
    
            ngx.say("match not found")
        end
        ngx.say('finished')

    虚拟主机:

        server {
            listen 8334;
            server_name  127.0.0.1;
            resolver 8.8.8.8;
    
            location /ngx_re_match {
                 lua_code_cache off;
                 content_by_lua_file $path/lua/ngx-re-match.lua;
             }
        }

    curl 请求结果:

    curl http://127.0.0.1:8334/ngx_re_match
    www.tinywan.com
    nil
    finished

    如果想获取一级域名:tinywan.com 请使用表达式:

    (?<=://w{5}.)[A-Za-z0-9.]+(?=/)

     帮助文档:

    http://blog.csdn.net/weiyuefei/article/details/38439017

  • 相关阅读:
    内置方法(item系列、__str__方法、__del__方法)
    POJ3436
    CF551B
    HDU1588
    HDU3117
    CF834D
    CF832D
    CF832C
    POJ1930
    POJ3666
  • 原文地址:https://www.cnblogs.com/tinywan/p/8288552.html
Copyright © 2020-2023  润新知