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

posted @   Tinywan  阅读(2366)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示