Lua从文件路径获取信息及通配符解释

来源:互联网 发布:命令行执行java文件 编辑:程序博客网 时间:2024/06/05 19:51

Lua文件从路径中中获取:

文件名(无后缀)、文件名(带后缀)、文件所在目录、文件去后缀路径、文件后缀


首先先来获得,Lua文件所在路径开始吧:

obj = io.popen("cd") --如果不在交互模式下,前面可以添加localpath = obj:read("*all"):sub(1,-2)--path存放当前路径(是为了去掉换行符)obj:close()   --关掉句柄print(path)

原理: 利用Windows的 cd 命令返回工作目录


如果安装了LuaForWindows,会有个lfs.dll,你可以这样使用:

require("lfs")path = lfs.currentdir()print(path)


下面说说如何从 一个全路径中获取 文件的:

文件名(无后缀)、文件名(带后缀)、文件所在目录、文件去后缀路径、文件后缀

--获取路径function StripFileName(filename)if string.find(filename,":") thenreturn string.match(filename, "(.+)\\[^\\]*%.%w+") -- windowselsereturn string.match(filename, "(.+)/[^/]*%.%w+$") -- *nix systemendend--获取带后缀文件名function StripPath(filename)if string.find(filename,":") thenreturn string.match(filename, ".+\\([^\\]*%.%w+)") -- windowselsereturn string.match(filename, ".+/([^/]*%.%w+)$") -- *nix systemendend--获取去后缀文件名function StripPathEx(filename)if string.find(filename,":") thenreturn string.match(filename, ".+\\([^\\]*)%.%w+") -- windowselsereturn string.match(filename, ".+/([^/]*%.%w+)$") -- *nix systemendend--去除扩展名function StripExtension(filename)local idx = filename:match(".+()%.%w+$")if(idx) thenreturn filename:sub(1, idx-1)elsereturn filenameendend--获取扩展名function GetExtension(filename)return filename:match(".+%.(%w+)$")end



来个例子试试:

--paths = "/use/local/openresty/nginx/movies/fffff.tar.gz"paths = "C:\\Users\\zhuzhuxia\\Desktop\\luac\\zhuzhu.test"print (StripPath(paths))print (StripPathEx(paths))print (StripFileName(paths))print (StripExtension(paths))print (GetExtension(paths))
可以改变paths 值看看啊,第一种情况是在linux系统下,第二种是在Windows系统下的。


这里稍微讲讲通配符吧:详情可以看看:http://blog.csdn.net/zhuzhuyule/article/details/41042369

例如:

--获取去后缀文件名function StripPathEx(filename)if string.find(filename,":") thenreturn string.match(filename, ".+\\([^\\]*)%.%w+") -- windowselsereturn string.match(filename, ".+/([^/]*%.%w+)$") -- *nix systemendend--return string.match(filename, ".+\\([^\\]*%.%w+)")



这里通配符是这样的:

.+\\([^\\]*)%.%w+


我们先把所有通配符看看:

.(点): 与任何字符配对
%a: 与任何字母配对
%c: 与任何控制符配对(例如\n)
%d: 与任何数字配对
%l: 与任何小写字母配对
%p: 与任何标点(punctuation)配对
%s: 与空白字符配对
%u: 与任何大写字母配对
%w: 与任何字母/数字配对
%x: 与任何十六进制数配对
%z: 与任何代表0的字符配对
%x(此处x是非字母非数字字符): 与字符x配对. 主要用来处理表达式中有功能的字符(^$()%.[]*+-?)的配对问题, 例如%%与%配对
[数个字符类]: 与任何[]中包含的字符类配对. 例如[%w_]与任何字母/数字, 或下划线符号(_)配对
[^数个字符类]: 与任何包含在[]中的字符类配对. 例如[^%s]与任何非空白字符配对


+      匹配前一字符1次或多次,匹配一个或多个字符,总是进行最长的匹配。
*      匹配前一字符0次或多次,与 '+' 类似,但是他匹配一个字符0次或多次出现
-      匹配前一字符0次或多次,进行的是最短匹配
?      匹配前一字符0次或1次,匹配一个字符0次或1次

在来看.+\\([^\\]*)%.%w+

.+ 多个任意字符

\\ 一个: \

([^\\]*) ()内的内容会返回,里边[^\\]*的意思:非'\'字符任意个('*'是任意个前一字符)

%. 一个小数点

%w+ 多个字母/数字

总结起来:...\(文件名,不含'\').文件后缀


eg: 

string.match("C:\temp\我是文件.exp", ".+\\([^\\]*%.%w+)")

-->  C:\temp\(我是文件).exp

--> 我是文件


其他几个的通配符,可以自己试着理解下啊!







0 0