Lua如何从请求URI的文件路径中删除指定动态文件夹
解决方案
你可以通过单次正则分组替换实现需求,不需要拆分路径再拼接,性能最优且能兼容path2、path3为任意非路径分隔符的动态值:
代码示例
local request_uri = "/path1/path2/path3/path4/path5/96_645.txt?lol=1" -- 正则分组逻辑:捕获第一层路径+后续需保留的所有内容,跳过中间两层要删除的路径 local cleaned_uri = request_uri:gsub("^(/[^/]+/)([^/]+/[^/]+/)(.*)$", "%1%3") print(cleaned_uri)
输出结果
/path1/path4/path5/96_645.txt?lol=1
规则说明
^(/[^/]+/):匹配开头第一层路径(对应你场景里的/path1/),作为第一个捕获组保留([^/]+/[^/]+/):匹配接下来的两层路径(就是要删除的path2、path3),作为第二个捕获组直接忽略(.*)$:匹配剩余的所有内容,包括后续路径、查询参数,作为第三个捕获组保留- 替换时用
%1%3拼接第一、第三个捕获组,自动过滤掉中间要删除的两层路径
优势
- 单次字符串操作即可完成,性能远高于多次拆分、拼接处理
- 自动完整保留查询参数,不需要额外处理
?后面的内容 - 适配path2、path3为任意非
/字符的动态场景,无额外兼容问题
内容的提问来源于stack exchange,提问作者C0nw0nk
相关产品推荐
相关产品推荐

