文件通配符

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 系统调用:参见任何此类 man 页,例如 http://linux.die.net/man/3/glob,了解详情。

[luaposix] 模块接口到这个库。--CharlesStewart?

解决方案:封装 APR fnmatch

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

其他示例

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


RecentChanges · preferences
编辑 · 历史
最后编辑于 2013年4月10日 上午1:41 GMT (差异)