String lua sting.match只需要第一次检测
我正在处理bluray文件夹,以使用io.open检测BDMV文件夹 当使用for循环查找NAS位置中的文件夹时,我使用sting.find获取文件夹列表中提到的“BDMV”。我将此值存储在一个表中 问题是,当我运行代码时,它将列出所有子目录,并将其添加到表中 我只需要文件夹的第一个实例,如String lua sting.match只需要第一次检测,string,lua,pattern-matching,String,Lua,Pattern Matching,我正在处理bluray文件夹,以使用io.open检测BDMV文件夹 当使用for循环查找NAS位置中的文件夹时,我使用sting.find获取文件夹列表中提到的“BDMV”。我将此值存储在一个表中 问题是,当我运行代码时,它将列出所有子目录,并将其添加到表中 我只需要文件夹的第一个实例,如 1=Minions.2015.1080p.BluRay.AVC.TrueHD.7.1.Atmos-RARBG/BDMV 我得到的是 所有子文件夹和文件的列表 1=Minions.2015.1080p.Bl
1=Minions.2015.1080p.BluRay.AVC.TrueHD.7.1.Atmos-RARBG/BDMV
我得到的是
所有子文件夹和文件的列表
1=Minions.2015.1080p.BluRay.AVC.TrueHD.7.1.Atmos-RARBG/BDMV
2=Minions.2015.1080p.BluRay.AVC.TrueHD.7.1.Atmos-RARBG/BDMV/AUXDATA
3=Minions.2015.1080p.BluRay.AVC.TrueHD.7.1.Atmos- RARBG/BDMV/AUXDATA/sound.bdmv
4=Minions.2015.1080p.BluRay.AVC.TrueHD.7.1.Atmos-RARBG/BDMV/BACKUP
5=Minions.2015.1080p.BluRay.AVC.TrueHD.7.1.Atmos-RARBG/BDMV/BACKUP/BDJO
6=Minions.2015.1080p.BluRay.AVC.TrueHD.7.1.Atmos- RARBG/BDMV/BACKUP/BDJO/00000.bdjo
7=Minions.2015.1080p.BluRay.AVC.TrueHD.7.1.Atmos-RARBG/BDMV/BACKUP/BDJO/00001.bdjo
8=Minions.2015.1080p.BluRay.AVC.TrueHD.7.1.Atmos-RARBG/BDMV/BACKUP/BDJO/00002.bdjo
等等
这是大约1000多个我不想要的文件条目
我尝试了sting.match来匹配一个模式,只检测第一个实例,而忽略其余的。到目前为止没有运气
if string.find(t,"BDMV") then
if string.match(t,"(.+/BDMV)") then
Movies[#Movies+1] = t
else
print("ignor")
end
如果您需要更多详细信息,请告诉我。谢谢。
如果string.find(t,“BDMV$”),则
可能会执行此任务。^.+
在这种情况下没有区别,因此可以删除。另外,您可能希望在BDMV
之后使用frontier模式,否则它也将在/BDMVsomethingelse
上匹配。或者只需检查/BDMV$
并跳过已有的缓存。@PaulKulchenko-^.+
无法删除,因为BDMV
之前的前缀是检测重复项所必需的。主要的想法是去掉后缀。@PaulKulchenko-关于/BDMV$
的想法已经由@Jakuje提出。@ppperry-我对上下文一无所知。只有OP能回答这个问题。“关于/BDMV$
的想法已经由@Jakuje提出了。”——是的,但是没有斜杠,它并不总是能达到预期效果。
local already_have = {}
local Movies = {}
-- Start of your loop
-- local t = ...
local name = string.match(t, "^.+/BDMV%f[%W]") -- Thanks to Paul for advice
if name and not already_have[name] then
already_have[name] = true
Movies[#Movies+1] = t
end
-- end of loop