Openresty正则开发

前言

在 OpenResty 中,同时存在两套正则表达式规范:Lua 语言的规范和 Nginx 的规范;即使您对 Lua 语言中的规范非常熟悉,仍不建议使用 Lua 中的正则表达式。

  1. 因为 Lua 中正则表达式的性能并不如 Nginx 中的正则表达式优秀;
  2. Lua 中的正则表达式并不符合 POSIX 规范,而 Nginx 中实现的是标准的 POSIX 规范,后者明显更具备通用性。

Lua 中的正则表达式与 Nginx 中的正则表达式相比,有 5%-15%性能损失,而且 Lua 将表达式编译成 Pattern 之后,并不会将 Pattern 缓存,而是每此使用都重新编译一遍,潜在地降低了性能。Nginx 中的正则表达式可以通过参数缓存编译过后的 Pattern ,不会有类似的性能损失。

o 选项参数用于提高性能,指明该参数之后,被编译的 Pattern 将会在 worker 进程中缓存,并且被当前 worker 进程的每次请求所共享。 Pattern 缓存的上限值通过 lua_regex_cache_max_entries 来修改。

 

1.1 Openresty正则

1.1.1 ngx.re.match

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

       只有第一次匹配的结果被返回,如果没有匹配,则返回nil;或者匹配过程中出现错误时,也会返回nil,此时错误信息会被保存在err中。

       当匹配的字符串找到时,一个Lua table captures会被返回,captures[0]中保存的就是匹配到的字串,captures[1]保存的是用括号括起来的第一个子模式的结果,captures[2]保存的是第二个子模式的结果,依次类似。

      参数:options

a 锚定模式,只从头开始匹配.
d DFA模式,或者称最长字符串匹配语义,需要PCRE 6.0+支持.
D 允许重复的命名的子模式,该选项需要PCRE 8.12+支持,例如
local m = ngx.re.match(“hello, world”,
“(?<named>\w+), (?<named>\w+)”,
“D”)
— m[“named”] == {“hello”, “world”}
i 大小写不敏感模式.
j 启用PCRE JIT编译, 需要PCRE 8.21+ 支持,并且必须在编译时加上选项–enable-jit,为了达到最佳性能,该选项总是应该和’o’选项搭配使用.
J 启用PCRE Javascript的兼容模式,需要PCRE 8.12+ 支持.
m
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值