我正在寻找通配符字符串匹配API(不是正则表达式匹配)。我不能使用Win32 API以外的其他任何东西。执行通配符字符串匹配的Win32 API
回答
的FindFirstFile
和FindNextFile
的API做通配符匹配,但只针对文件名。
不能使用任何但的Win32?那么STL或CRT呢?你在使用Boost吗?
没有Win32 API限制,我会建议使用某些开源项目的代码。另一种选择是将glob转换为正则表达式,我相信这可以通过正则表达式替换操作来完成。
编辑:一是谷歌比赛是PHP代码:
究竟是你的要求吗?你只是想使用''符号来匹配0或更多的字符,或者你打算使用'?'符号也是如此。如果它仅仅是 '',你需要寻找一个,一个,一个B,A B * C等类型的模式?如果你的需求是有限的,你可以轻松脱离C++运行时库的strstr函数。
最简单的事情将只是你的glob模式转换为正则表达式,按以下规则:
*
成为.*
?
成为.
- 任何
\|.^$+()[]{}
它们之前被转义与\
这是部分正确的。
以下规则从DIR行为XP +命令提示符引导:
*
相同*.*
,成为正则表达式.+
?
除非后跟一个非通配符后面没有通配符
?
成为正则表达式变成正则表达式.?
.
*.
意味着 “没有扩展名”,并成为[^.]+$
有PathMatchSpec - 但处理是专门用于文件的,所以如果你需要一般的通配符匹配,结果可能不是你所期望的。
否则,您应该使用正则表达式,因为帕维尔详细。
[编辑] 我错误地假定股PathMatchSpec
的FindFirstFile/FindNextFile属性。我已经跑了一些测试 - 它没有。所以它看起来是最好的候选人。
一个非常有趣的发现。我想知道如何专门为路径,但(如果它实际上是)。 – 2009-07-31 22:01:31
奇怪的是,这么多年过去了,没人给你这个答案:
有一个WIN32 API,完全符合你的要求。 (我发现它在MSDN中搜索“通配符”)
它的名字是SymMatchString()
。它位于操作系统的一部分DbgHelp.dll中。
如果您的应用程序是mulithreaded,请在API调用中添加CriticalSection!
http://msdn.microsoft.com/en-us/library/windows/desktop/ms681355%28v=vs.85%29.aspx
是FindFirstFile()
内部使用通配符的API相匹配可能是FsRtlIsNameInExpression()
。
Elmü
- 1. php字符串匹配通配符*?
- 2. 匹配字符串通配符
- 3. 字符串搜索/通配符匹配
- 4. PHP如何找到字符串后匹配/通配符/匹配
- 5. JavaScript将当前url与通配符字符串进行匹配?
- 6. 字符之间的通配符匹配
- 7. 字符串匹配
- 8. 匹配字符串
- 9. 匹配字符串
- 10. 匹配字符串
- 11. 字符串匹配
- 12. 字符串匹配
- 13. 匹配字符串
- 14. elisp中的匹配字符串没有返回匹配字符串匹配的字符串
- 15. 字符串数组匹配字符串
- 16. 如何使用通配符的字符串匹配
- 17. MySQL的通配符匹配子字符串两个领域
- 18. 使用通配符*和?匹配字符串的JavaScript RegExp
- 19. Excel的字符串匹配
- 20. 匹配的字符串
- 21. 字符串匹配(JavaScript)的
- 22. 匹配文字字符串'\ $'
- 23. 使用通配符匹配字符串在Ruby中
- 24. 如何将字符串通配符模式在Excel宏匹配
- 25. 字符串使用通配符匹配,试图Biostrings包
- 26. 注释掉匹配字符串的行
- 27. JavaScript字符串通配符
- 28. 子项通过匹配字符串
- 29. 正则表达式:匹配字符串时不会通过匹配字符串中间的转义引号来匹配匹配字符串
- 30. 重复字符匹配正则表达式匹配字符串
你是什么意思的“通配符字符串匹配”?请举例。 – 2009-07-31 21:31:38
示例或(最好)规范。如果你的意思是在Windows上使用相同的规则来存档通配符,但是没有明确地说出来,那么通常Neil会按下一个更好的需求文档;-)另外,我发现文件中的`*`和`?不匹配反斜线字符 - 它可能会影响您是否需要此行为的答案。 – 2009-07-31 21:52:26