Openresty在表ngx.re里提供六个正则表达式相关函数,它们的底层实现是PCRE 库,速度极快,完全可以代替Lua标准库的宇符串匹配函数。
match:单次正则匹配,同时也会捕获子表达式
gmatch:多次正则匹配(以法代器的方式)
find:同match,但返回的是查找到的位置索引
sub:正则替换
gsub:多次正则替换
split:正则切分
◆ 配置指令:
OpenResty提供两个指令用于优化正则表达式的性能。
1.lua_regex_cache_max_entries num
OpenResty会把程序里出现的正则表达式编译后缓存备用(使用“o”选项),这个指令确定了能够缓存的最多数量, 默认是1024 个。如果我们的程序里大量使用了正则表达式,那么就应该在配置文件里用它增大可缓存的数量。
2.lua_regex_match_limit num
设置正则表达式匹配时回溯( backtraking )的最大次数,可以把它设置的小一些以提高运行效率。参数num的默认值是0 ,表示OpenResty将使用PCRE的默认值10000000(一千万)。
◆ 匹配选项:
OpenResty的正则表达式函数都有一个名为options的参数,它是一个字符串,用来定制匹配行为:
a:“锚定”模式,仅从最开始的位置匹配
d:启用DFA模式,确保匹配最长的可能字符串
D:允许重复的命名捕获( duplicate named pattern)
i:忽略大小写,即大小写不敏感
j:启用PCRE-JIT编译,通常与“o”联用
J:兼容JavaScript 的正则表达式语法
m:多行模式
o:正则表达式仅编译一次( compile once),随后缓存
s:单行模式
u:支持UTF-8编码
u:同“u”,但不验证UTF-8编码的正确性
x:启用“扩展”模式,类似Perl的“/x ”
这些参数字符可以联合使用,同时指定多个功能