pet*_*hen 10
有PathMatchSpec - 但处理专门用于文件,因此如果需要通用通配符匹配,结果可能不是您所期望的.
否则,您可能应该使用RegEx,如Pavel详细说明的那样.
[编辑]
我错误地假设PathMatchSpec共享FindFirstFile/FindNextFile的属性.我跑过几次测试 - 但事实并非如此.所以看起来它是最好的候选人.
奇怪的是,这么多年过去了,没有人给你这个答案:
有一个WIN32 API可以完全满足您的需求.(我发现它在MSDN中搜索"通配符")
它的名字是SymMatchString().它位于DbgHelp.dll中,它是操作系统的一部分.
如果您的应用程序是多线程的,请在API调用周围放置一个CriticalSection!
http://msdn.microsoft.com/en-us/library/windows/desktop/ms681355%28v=vs.85%29.aspx
FindFirstFile()可能是内部用于通配符匹配的API FsRtlIsNameInExpression().
Elmü
最简单的方法是通过以下规则将glob模式转换为正则表达式:
* 变 .*? 变 .\|.^$+()[]{}通过前面的任何一个逃脱\这部分是正确的.
以下规则是从XP +命令提示符中的DIR行为导入的:与正则表达式
*相同*.*并且变为正则表达式.+
?变为正则表达式,.?除非后面跟着非通配符
?后面没有通配符变为正则表达式.
*.意味着"没有扩展名",并且变为[^.]+$
和API 进行通配符FindFirstFile匹配FindNextFile,但仅针对文件名。
除了 Win32就不能用别的吗?STL 或 CRT 怎么样?你在使用Boost吗?
如果没有 Win32 API 限制,我建议使用一些开源项目的代码。另一种选择是将 glob 转换为正则表达式,我相信这可以通过正则表达式替换操作来完成。
编辑:第一个谷歌匹配是PHP代码:
http://cvs.php.net/viewvc.cgi/php-src/win32/