文件通配符

lua-users home
wiki

Lua 标准库,就像 ANSI C 一样,缺少内置的文件通配符函数(参见 [Wikipedia:Glob]),该函数用于将表达式(例如 hello[a-z]??.*)与文件名进行匹配。本页介绍了一些在 Lua 中支持此功能的方法。

通配符有多种语法。参见

Windows FindFileFirst/FindFileNext API 函数实现的通配符函数可能特别反直觉,有时应避免使用(例如,*.txt 可能会同时匹配 1.txt1.txt~)。因此,将这些 API 函数封装在 Lua 扩展 DLL 中可能不是最理想的方法。

解决方案:纯 Lua

以下方法将通配符表达式转换为 Lua 模式,然后可以在 Lua 的模式匹配函数中使用。从概念上讲,忽略语法差异,通配符是 Lua 模式的子集,而 Lua 模式是正则表达式的子集。但是,通配符有时会有一些模糊的规则和特殊情况(见上文),具体取决于所选的语法。

源代码:https://gist.github.com/1408288

--DavidManura

解决方案:Posix

Posix 规定,兼容系统提供一个 glob 系统调用:参见任何此类手册页,例如 http://linux.die.net/man/3/glob,了解详细信息。

[luaposix] 模块与该库接口。--CharlesStewart?

解决方案:封装 APR fnmatch

参见 LuaApr 中的 [apr.fnmatch()] 函数,该函数封装了 APR 的 fnmatch 函数。

其他示例

另请参见 SciteExtMan 中的 scite_Files。另请注意 [Perl glob]


最近更改 · 首选项
编辑 · 历史记录
最后编辑于 2013 年 4 月 10 日上午 7:41 GMT (差异)