openresty ngx_lua正则表达式


openresty ngx_lua正则表达式

        

                 

                                   

ngx.re.match

         

ngx.re.match:返回第一个匹配的结果

语法格式:value, err = ngx.re.match(subject, pattern, options?, ctx?, nth?)
* 如果有匹配结果,返回第一个匹配的结果
* 如果没有匹配的结果,value=nil
* 如果出现异常,value=nil,err为异常信息

# options可选值
i:忽略大小写
o:仅编译一次
m:多行模式
j:启用pcre jit编译,nginx需带参数(--enable-jit),常与参数o一起使用

# ctx:指定开始查找的位置,位置下标从1开始计数
* local ctx = {pos = 10},从位置10开始查找

# nth:将索引为nth的表数据返回,默认为0
* ngx.re.match(subject, pattern)返回value, 
* ngx.re.match(subject, pattern, "oj", nil, 1) <==> value[1]

环境:init_worker_by_lua*、ngx.timer*、balancer_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*
     ssl_certificate_by_lua*、ssl_session_fetch_by_lua、ssl_session_store_by_lua

             

示例

location / {
    content_by_lua_block {
        local m, err = ngx.re.match(ngx.var.uri, "([0-9]+)(aaa)");
        if m then
            ngx.say(ngx.var.uri, " 匹配成功,返回的结果类型 ==> ", type(m));
            ngx.say(ngx.var.uri, " m[0] ==> ", m[0]);  #m[0]返回第一个匹配的全部数据
            ngx.say(ngx.var.uri, " m[1] ==> ", m[1]);  #m[1]数据中第1个括号中的数据
            ngx.say(ngx.var.uri, " m[2] ==> ", m[2]);  #m[2]数据中第2个括号中的数据
            ngx.say(ngx.var.uri, " m[3] ==> ", m[3]);  #m[3]数据中第3个括号中的数据,没有则为nil
        else
           if err then
              ngx.say(ngx.var.uri, "匹配出错:", err);
           end
           ngx.say(ngx.var.uri, "没查到匹配结果");
        end
    }
}

curl localhost:80/123aaa/234aaa,结果输出:
/123aaa/234aaa 匹配成功,返回的结果类型 ==> table
/123aaa/234aaa m[0] ==> 123aaa
/123aaa/234aaa m[1] ==> 123
/123aaa/234aaa m[2] ==> aaa
/123aaa/234aaa m[3] ==> nil

              

                 

                                   

ngx.re.gmatch

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值