尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

探究Openresty中ngx.re与Lua string.re两种正则的选择

探究Openresty中ngx.re与Lua string.re两种正则的选择
📅 发布时间:2026/6/19 14:22:05

本文分享自天翼云开发者社区《探究Openresty中ngx.re与Lua string.re两种正则的选择》.作者:王****淋

0. 背景

openresty中存在2套正则API,即ngx.re与 lua语言的string库,都可以实现正则匹配查找等功能,那么,这2个API有什么区别,又如何选择呢?

1. 性能测试

1.1 简单loop测试

a) 短字符串&正则串

local http_range = 'bytes=10-65535'
local string_re_p = '^bytes=([%d]*)%-([%d]*)$'
local ngx_re_p    = '^bytes=([\\d]*)?\\-([\\d]*)$'
local loop = 1000000local t0 =  get_t()
for i = 1, loop dolocal _, _ = string_match(http_range, string_re_p)
endlocal t1 =  get_t()
for i = 1, loop dolocal m, err = ngx_re_match(http_range, ngx_re_p, "jo")
end
local t2 =  get_t()

Result: 0.247 vs. 0.32

b) 长字符串&复杂正则串

local http_range = 'dsfds65465fwef bytes=12345757860-4465458586465 ewfsd65sd4fg65fsd'
local string_re_p = '.*bytes=([%d]*)%-([%d]*) .+'
local ngx_re_p    = '.*bytes=([\\d]*)?\\-([\\d]*) .+'
local loop = 1000000

Result: 1.16 vs. 0.526

由测试结果可以看出,对于字符串/正则规则越复杂,ngx-re的性能是有优势的

1.2. 加入jit扰动

a) 对照组:ipairs不破坏jit (短串正则)

local http_range = 'bytes=10-65535'
local string_re_p = '^bytes=([%d]*)%-([%d]*)$'
local ngx_re_p    = '^bytes=([\\d]*)?\\-([\\d]*)$'
local loop = 1000000local t0 =  get_t()
for i = 1, loop dofor k, v in ipairs({1,2}) do endlocal _, _ = string_match(http_range, string_re_p)
endlocal t1 =  get_t()
for i = 1, loop dofor k, v in ipairs({1,2}) do endlocal m, err = ngx_re_match(http_range, ngx_re_p, "jo")
end
local t2 =  get_t()

jit-on: 0.369 - 0.326
jit-off: 0.38 - 3.265

b) pairs 破坏jit (短串正则)

local http_range = 'bytes=10-65535'
local string_re_p = '^bytes=([%d]*)%-([%d]*)$'
local ngx_re_p    = '^bytes=([\\d]*)?\\-([\\d]*)$'
local loop = 1000000local t0 =  get_t()
for i = 1, loop dofor k, v in pairs({a=1,b=2}) do endlocal _, _ = string_match(http_range, string_re_p)
endlocal t1 =  get_t()
for i = 1, loop dofor k, v in pairs({a=1,b=2}) do endlocal m, err = ngx_re_match(http_range, ngx_re_p, "jo")
end
local t2 =  get_t()

jit-off: 0.395 - 3.216
jit-on: 0.394 - 1.04

c) pairs + 长复杂串

local http_range = 'dsfds65465fwef bytes=12345757860-4465458586465 ewfsd65sd4fg65fsd'
local string_re_p = '.*bytes=([%d]*)%-([%d]*) .+'
local ngx_re_p    = '.*bytes=([\\d]*)?\\-([\\d]*) .+'
local loop = 1000000

jit-on: 1.31 - 1.30
jit-off: 1.307 - 2.94

超长串 + jit-on:

local http_range = 'dsfds6546vsdvsdfdsfsdfsdfwaasdasdasdas5fwef bytes=12354345345345757860-4465453453453453453453453458586465 ewfsd65safdknsalk;nlkasdnflksdajfhkldashjnfkl;ashfgjklahfg;jlsasd4fg65fsd'

结果: 2.775 - 1.739

1.3测试结果汇总

 string.matchngx.re.match备注
短串正则 0.247 秒 0.32 秒 jit-hit
短串正则 带ipirs 0.369 0.326 jit-hit
短串正则 带pairs 0.394 1.04  
长串正则 带pairs 2.775 1.739  
短串正则 带pairs+jit-off 0.395 3.216 jit-off
短串正则 带ipairs+jit-off 0.38 3.265 jit-off

2. 结论

由测试结果可知:
1)在一般情况下,nginx-re正则库更能适应复杂字符串与复杂正则规则的情况,一般情况下比较推荐使用
2)在极简单字符串的情况下,二者差别不大,string正则稍带优势,可以按照方便的写法来写;
3)nginx-re正则受JIT的影响更大,在关闭jit或使用pairs等情况下,可能会有拖累;

相关新闻

  • 2025年杭州可靠的GEO品牌推荐,GEO优化/豆包优化排名/GEO优化AI工具排名/豆包优化/GEO优化AI搜索GEO老牌厂家哪家好 - 品牌推荐师
  • 2025综合评测:上海哪家装修公司最值得选择? - 品牌排行榜
  • 2025国内镁合金售后较好知名品牌企业有哪些,行业十大优质厂家推荐,靠谱看市场给口碑 - 品牌推荐大师1

最新新闻

  • 周口市2026年最新黄金回收+白银回收+铂金回收+彩金回收门店TOP排行榜+推荐及联系方式+地址+电话+靠谱店铺指南 - 大熊猫898989
  • 乐秀视频剪辑器永久会员版:专业级视频剪辑工具全功能解锁
  • 推理模型落地实战:从思维链到工业级可信推理系统
  • 2026年兰州市PMP培训机构哪家好?官方授权R.E.P.报考指南 - 众智商学院课程中心
  • YOLO12模型WebUI自动化测试与CI/CD实践:从Selenium到Jenkins全流程解析
  • 三明市本地2026年最新黄金回收靠谱门店TOP排行榜+白银回收+铂金回收+彩金回收及联系方式+地址+电话+诚信店铺推荐 - 盛世金银回收

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号