Win32 API用于进行通配符字符串匹配

use*_*071 9 c c++ winapi glob wildcard

我正在寻找一个通配符字符串匹配API(不是正则表达式匹配).我不能使用除Win32 API之外的任何东西.

pet*_*hen 10

PathMatchSpec - 但处理专门用于文件,因此如果需要通用通配符匹配,结果可能不是您所期望的.

否则,您可能应该使用RegEx,如Pavel详细说明的那样.

[编辑]错误地假设PathMatchSpec共享FindFirstFile/FindNextFile的属性.我跑过几次测试 - 但事实并非如此.所以看起来它是最好的候选人.


Elm*_*mue 6

奇怪的是,这么多年过去了,没有人给你这个答案:

有一个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ü


Pav*_*aev 5

最简单的方法是通过以下规则将glob模式转换为正则表达式:

  • *.*
  • ?.
  • \|.^$+()[]{}通过前面的任何一个逃脱\

这部分是正确的.

以下规则是从XP +命令提示符中的DIR行为导入的:与正则表达式
*相同*.*并且变为正则表达式.+
?变为正则表达式,.?除非后面跟着非通配符
?后面没有通配符变为正则表达式.
*.意味着"没有扩展名",并且变为[^.]+$


Tim*_*ter 4

和API 进行通配符FindFirstFile匹配FindNextFile,但仅针对文件名。

除了 Win32就不能用别的吗?STL 或 CRT 怎么样?你在使用Boost吗?

如果没有 Win32 API 限制,我建议使用一些开源项目的代码。另一种选择是将 glob 转换为正则表达式,我相信这可以通过正则表达式替换操作来完成。

编辑:第一个谷歌匹配是PHP代码:

http://cvs.php.net/viewvc.cgi/php-src/win32/