实现独立于平台的Glob 我试图在C++中实现,或者 GOLB类似函数。

实现独立于平台的Glob 我试图在C++中实现,或者 GOLB类似函数。,c++,cross-platform,C++,Cross Platform,我已经有了一个将目录内容读取到std::vector容器中的函数(我们将此函数称为ListDirectory()),因此我显然只需要stringmatching部分-我的问题: 实施时应该遵循什么样的理念 人们是否应该记住一些常见的问题 使用一个完整的regexp库(比如PCRE)或者更简单的模式匹配la Lua是否明智 如果使用简单模式匹配更好,是否已经有可用的函数/库/类(关于scanf和朋友呢) 如果您正在搜索独立于平台的通配符库, 例如,有一个图书馆 如果您是为了自学目的而检查模式匹配

我已经有了一个将目录内容读取到
std::vector
容器中的函数(我们将此函数称为
ListDirectory()
),因此我显然只需要stringmatching部分-我的问题:

  • 实施时应该遵循什么样的理念
  • 人们是否应该记住一些常见的问题
  • 使用一个完整的regexp库(比如PCRE)或者更简单的模式匹配la Lua是否明智
  • 如果使用简单模式匹配更好,是否已经有可用的函数/库/类(关于
    scanf
    和朋友呢)

如果您正在搜索独立于平台的通配符库, 例如,有一个图书馆

如果您是为了自学目的而检查模式匹配, 对于回溯的基本正则表达式, 我想是第一章 很好地说明了这一点

当您熟悉正则表达式时,可能会转换 通配符转换为正则表达式,或将正则表达式代码转换为 通配符匹配器,不会是一项困难的工作

关于NFA的现实正则表达式, 详细解释见 罗斯·考克斯


希望这对我有所帮助,我使用这个:,以一种稍微适应的形式,在
*
中拒绝目录分隔符
/
。如果您想要稍微调整的代码(为了好玩,我还将指针转换为字符串/迭代器))。它干净简单,不需要更多的花哨

您是否考虑过globs可以包含子目录?当glob类似于
“*/*”
时,包含当前目录中所有文件的列表对您没有多大帮助。当然,除非您的
ListDirectory
也递归地列出所有子目录的内容。但是在这种情况下,您的方法效率很低,因为它总是遍历目录树到最后,即使glob只有1或2级深度。另外:有什么原因让你实现这个功能而不是编写POSIX函数的包装器吗?编写一个
RecursiveListDirectory
函数是很简单的,这将很容易满足
*/*
@sepp2k的要求:因为我说的是实现glob(主要是为了更好地掌握所有与模式匹配相关的事情)。shwild需要使用STLSoft,这是一种危险的弃用软件(可能不会存在很长时间)。