我正在寻找通配符字符串匹配 API(不是正则表达式匹配)。我不能使用除 Win32 API 之外的任何东西。
6 回答
There is PathMatchSpec - but handling is specialized for files, so results might not be what you expect if you need general wildcard matching.
Otherwise, you should probably go with an RegEx, as Pavel detailed.
[edit]
I incorrectly assumed PathMatchSpec
shares the properties of FindFirstFile/FindNextFile. I've ran a few tests - it doesn't. So it looks like the best candidate.
奇怪这么多年过去了,没有人给你这个答案:
有一个 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()
.
埃尔穆
The easiest thing would be to just convert your glob pattern to a regex, by the following rules:
*
becomes.*
?
becomes.
- Any of
\|.^$+()[]{}
are escaped by preceding them with\
This is partly true.
Following rules are inducted from DIR behaviour in XP+ Command Prompt:
*
is the same as *.*
and becomes regex .+
?
becomes regex .?
unless followed by a non-wildcard
?
not followed by a wildcard becomes regex .
*.
means "without extension", and becomes [^.]+$
和API 进行通配符匹配,但仅针对文件名FindFirstFile
。FindNextFile
除了Win32,你什么都不能用?STL 或 CRT 呢?你用的是升压吗?
如果没有 Win32 API 限制,我建议使用一些开源项目的代码。另一种选择是将 glob 转换为正则表达式,我相信这可以通过正则表达式替换操作来完成。
编辑:第一个谷歌匹配是 PHP 代码:
你的要求到底是什么?您只是想使用 ' ' 符号来匹配 0 个或更多字符,还是打算使用 '?符号也是。如果只是 ' ',是否需要查找a、a、a b、a b*c 等类型模式?如果您的要求有限,您可以轻松摆脱 C++ 运行时库的 strstr 函数。