Lua中高效提取文件父目录:去除文件名的最优实现方案
最优获取文件父目录的实现方式
给定文件路径/file/path/name,要以最高性能提取它的父目录(也就是去掉路径里的文件名部分),你给出了三种正则实现思路,下面逐个分析并给出最优方案:
gsub('[^/]+$',''):用正则匹配路径末尾所有非斜杠字符,将其替换为空。对目标路径/file/path/name处理后得到/file/path/,但如果路径末尾是斜杠(比如/file/path/),这个正则匹配不到内容,结果还是原路径;如果是无斜杠的单个文件名,会返回空字符串,不符合预期。gsub('/[^/]+$','/'):匹配最后一个斜杠及后面的非斜杠字符,替换为单个斜杠。对目标路径处理后得到/file/path/,边界情况和上面类似,末尾斜杠的路径不会被修改,单个文件名的话会把name替换成/,得到/,也不符合预期。match('^.+/'):直接匹配从路径开头到最后一个斜杠的部分,提取该匹配结果即可。对目标路径处理后得到/file/path/,操作上只是提取匹配内容,不需要修改原字符串,性能比前两种gsub替换更高。唯一需要注意的是,如果路径是无斜杠的单个文件名,这个方法会返回nil,此时可以额外处理成当前目录./。
综合性能和逻辑简洁性,match('^.+/')是最优实现——它避免了字符串替换的开销,直接定位并提取所需的父目录路径,在大多数场景下效率更高。
内容的提问来源于stack exchange,提问作者JosefLitos
相关产品推荐
相关产品推荐

