Lua从请求uri中删除文件路径中的文件夹

Posted

技术标签:

【中文标题】Lua从请求uri中删除文件路径中的文件夹【英文标题】:Lua remove folders in file path from request uri 【发布时间】:2021-11-02 10:26:54 【问题描述】:

我有这样的网址:

/path1/path2/path3/path4/path5/96_6.txt
/path1/path2/path3/path4/path5/96_7.txt?blah=1

到目前为止,我正在执行以下操作以获取 URL 末尾的文件:

local request_uri = "/path1/path2/path3/path4/path5/96_645.txt?lol=1"
local name = request_uri:match( "([^/]+)$" )
local filename = string.gsub(name, "?.*", "")


print(name)
print(filename)

输出什么:

96_645.txt?lol=1
96_645.txt

我想要做的是从我的 URL 中删除 path2path3。问题是它们是动态文件夹路径,可以包含字符。

什么是最好的解决方案?

【问题讨论】:

【参考方案1】:

试试这个:

function fix_url(p)
  p, _ = string.gsub(p, '^/([^/]+)/[^/]+/[^/]+/(.*)', '/%1/%2')
  return p
end

这里有一些测试:

p = fix_url('/path1/path2/path3/path4/path5/96_6.txt') 
assert(p == '/path1/path4/path5/96_6.txt')
p = fix_url('/path1/path2/path3/path4/path5/96_7.txt?blah=1') 
assert(p == '/path1/path4/path5/96_7.txt?blah=1')
p = fix_url('/path1/foo.txt') 
assert(p == '/path1/foo.txt')

【讨论】:

我修改了你的正则表达式。 p, _ = string.gsub(p, '^/([^/]+)/[^/]+/[^/]+/(.*)[^/]+/[^/]+/( .*)', '/%1/%2/%3') 我正在尝试保留 path4 文件夹 /path1/path4/96_645.txt?lol=1" 并删除 path5 文件夹,但我做错了什么......

以上是关于Lua从请求uri中删除文件路径中的文件夹的主要内容,如果未能解决你的问题,请参考以下文章

使文件名保留在boost中的路径中[关闭]

lua怎么批量删除文件名差不多的文件?

如何从批处理脚本中的文件路径中删除最后一个“\”

lua.e2加密文件怎么解密?

如何从 Bash 中的路径字符串中删除文件后缀和路径部分?

从文件路径中删除第一个目录组件