`
wellse
  • 浏览: 13769 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

【原创】OpenResty Lua 中使用 Nginx 正则表达式

阅读更多

Lua 自带的正则表达式确实有点另类,不支持 “|” 而且正则语法不好适应,想用Nginx原生的正则表达式就需要在Lua中借助Nginx内置对象 ngx.re

 

正则在 nginx.conf 文件中错误的使用方法:

    # nginx.conf
    ? location /test {
    ?     content_by_lua '
    ?         local regex = "\d+"  -- THIS IS WRONG!!
    ?         local m = ngx.re.match("hello, 1234", regex)
    ?         if m then ngx.say(m[0]) else ngx.say("not matched!") end
    ?     ';
    ? }
    # evaluates to "not matched!"

 nginx.conf 文件中正确使用方法 记得是\\\\才能转义

    # nginx.conf
    location /test {
        content_by_lua '
            local regex = "\\\\d+"
            local m = ngx.re.match("hello, 1234", regex)
            if m then ngx.say(m[0]) else ngx.say("not matched!") end
        ';
    }
    # evaluates to "1234"

 

可以使用Lua中特有的 [[ 正则 ]] 定义符号

    # nginx.conf
    location /test {
        content_by_lua '
            local regex = [[\\d+]]
            local m = ngx.re.match("hello, 1234", regex)
            if m then ngx.say(m[0]) else ngx.say("not matched!") end
        ';
    }
    # evaluates to "1234"

这个自己翻译了

Here, [[\\d+]] is stripped down to [[\d+]] by the Nginx config file parser and this is processed correctly.

Note that a longer from of the long bracket, [=[...]=], may be required if the regex pattern contains [...] sequences. The [=[...]=] form may be used as the default form if desired.

    # nginx.conf
    location /test {
        content_by_lua '
            local regex = [=[[0-9]+]=]
            local m = ngx.re.match("hello, 1234", regex)
            if m then ngx.say(m[0]) else ngx.say("not matched!") end
        ';
    }
    # evaluates to "1234"

如果采用 content_by_lua_file 'test.lua'  \\\\d+ 简化为 \\d+

    -- test.lua
    local regex = "\\d+"
    local m = ngx.re.match("hello, 1234", regex)
    if m then ngx.say(m[0]) else ngx.say("not matched!") end
    -- evaluates to "1234"

如果采用 content_by_lua_file 'test.lua'   [[\\d+]] 简化为  [[\d+]]

    -- test.lua
    local regex = [[\d+]]
    local m = ngx.re.match("hello, 1234", regex)
    if m then ngx.say(m[0]) else ngx.say("not matched!") end
    -- evaluates to "1234"

来源:http://wiki.nginx.org/HttpLuaModule

 

分享到:
评论

相关推荐

    ngx_openresty_lua_技术交流实践

    - **正则表达式与虚变量**:使用Lua处理文本匹配的正则表达式技巧以及变量作用域管理。 - **module()与FFI**:理解module()定义模块的利弊以及FFI(外部函数接口)的作用。 - **JIT**:了解即时编译(JIT)技术以及...

    lua-nginx-module完全指南.docx

    《Lua-Nginx-Module完全指南》是一份深入解析如何使用Lua在Nginx中编写脚本的文档。本文档涵盖了指令、API接口以及相关的使用方法,为开发者提供了全面的指导。Nginx-Lua模块使得在Nginx配置文件中嵌入Lua脚本成为...

    lua-resty-route:用于OpenResty支持可插拔匹配引擎的URL路由库

    `lua-resty-route-master` 压缩包文件很可能是该库的源代码仓库,包含了所有必要的 Lua 源码文件和文档,用户可以自行编译安装或直接在 OpenResty 的环境中使用。通过阅读源码和官方文档,开发者可以更深入地了解其...

    openresty 最佳实践

    - 掌握Lua的非空判断、正则表达式、虚变量、函数定义、模块定义、元表等高级特性。 - 了解Lua代码的最佳实践,比如使用点号与冒号操作符的区别,以及在调用代码前进行函数定义等。 - 理解OpenResty中的location...

    Openresty二进制版本(openresty-1.19.9.1-win32.zip)

    - **丰富的库支持**:OpenResty预装了许多Lua库,如Lrexlib(正则表达式库)、LuaCosocket(TCP/UDP套接字库)、lua-protobuf(Google Protobuf支持)等,便于构建复杂的应用。 3. **安装与使用OpenResty**: - ...

    跟我学Nginx + Lua开发

    通过学习上述内容,开发者可以掌握在Nginx中集成Lua语言,使用OpenResty开发高性能的Web应用程序的技能。同时,通过具体的实战案例,可以加深对Nginx+Lua架构的理解,并能够将理论知识应用到实际开发中去。这种开发...

    linux-使用NginxLua实现的WAF

    (4)**定义WAF规则**:在Lua脚本中,可以定义各种规则,例如使用正则表达式检测SQL注入、XSS攻击,或者检查特定请求头和参数。当匹配到规则时,可以返回403禁止访问,或者记录日志并继续处理请求。 (5)**日志...

    OpenResty最佳实践

    要在OpenResty中使用Lua,首先需要搭建Lua环境。这包括安装Lua解释器,以及可能的依赖项。在不同的操作系统上搭建Lua环境的具体步骤可能会有所差异。 #### 基础数据类型 Lua中的基础数据类型包括数字、字符串、布尔...

    openresty-1.15.8.3-win64

    5. **第三方库**:OpenResty集成了许多开源库,如PCRE(Perl Compatible Regular Expressions)用于正则表达式匹配,OpenSSL用于加密和安全通信等。 6. **构建工具和脚本**:可能包含用于安装、配置和更新OpenResty...

    跟我学Nginx+Lua开发.pdf

    - `--with-pcre`: Perl兼容的正则表达式模块。 - `--with-luajit`: 集成LuaJIT模块。 - `--add-module=...`: 添加自定义模块,例如ngx_cache_purge和nginx_upstream_check_module。 **6. 编译与安装** - 使用`...

    openresty源码包,包含pcre zlib openssl等依赖

    通过集成LuaJIT,OpenResty允许开发者使用Lua语言编写高性能的Web应用逻辑,包括动态路由、会话管理、缓存控制等,同时保持Nginx的高性能和稳定性。 在获取到这些源码包后,你需要按照以下步骤来编译和安装...

    nginx高级知识.pdf

    * 可以使用正则表达式来匹配URI 二、代理传参 * proxy_pass 指令用于将请求代理到其他服务器 * 可以将整个 path 部分传入 Tomcat:proxy_pass = ip:port * 也可以只将匹配 path 的剩余部分传入 Tomcat:proxy_pass...

    OpenResty-Best-Practices.pdf

    深入到Lua的高级特性,可以涉及面向对象编程,如何定义和使用类和对象,判断数组大小和非空,使用正则表达式,以及Lua的模块化编程,这里提到的module()函数的使用及其与函数定义的关系需要注意。 对于OpenResty的...

    OpenResty-Best-Practices.zip

    5. **最佳实践 - 路由配置**:合理设计路由规则,避免过于复杂的匹配逻辑,使用正则表达式或 Lua 代码进行精确控制,确保请求被正确分发。 6. **最佳实践 - 性能优化**:利用OpenResty的非阻塞I/O模型,避免不必要...

    nginx安装文件

    6. **使用Lua模块**:Nginx与Lua结合,可以通过OpenResty(一个基于Nginx与LuaJIT的Web平台)实现快速开发动态应用。Lua模块让Nginx能够执行 Lua 脚本,处理动态请求,如数据库查询、计算等。通过在`nginx.conf`中...

    ngx_openresty服务器安装步骤.docx

    这些包包括Perl 5.6.1或更高版本,libreadline,libpcre(Perl兼容正则表达式库)以及libssl(用于加密和安全通信)。对于基于Debian和Ubuntu的系统,可以使用以下命令安装这些依赖: ```bash apt-get install ...

    Nginx中使用Lua脚本配置示例

    如果要拦截包含特殊字符的URL,例如"firstsale/AjaxPanicNow",我们需要在正则表达式中对特殊字符进行转义。在Nginx配置中,可以这样写: ```nginx if ($request_uri ~ "firstsale\/AjaxPanicNow") { rewrite_by_...

    微服务Api网关框架11-20.7z

    location可以根据URL路径、正则表达式等条件匹配请求,将它们转发到不同的服务或者执行不同的操作。 "13.nginx的echo模块安装.mp4"涉及到了Nginx的第三方模块echo。echo模块用于在Nginx内部进行数据回显,常用于...

    nginx安装相关

    - PCRE(Perl Compatible Regular Expressions)是Nginx用来解析正则表达式的库。下载pcre源码包,例如`pcre-8.30.tar.gz`,解压后进入目录。 - 配置并编译PCRE: ``` ./configure && make && sudo make install...

Global site tag (gtag.js) - Google Analytics