我正在寻找通配符字符串匹配API(不是正则表达式匹配)。我不能使用除Win32 API以外的任何东西。
答案 0 :(得分:10)
有PathMatchSpec - 但处理专门针对文件,因此如果您需要通用通配符匹配,结果可能不是您所期望的。
否则,您应该使用RegEx,就像Pavel详细说明一样。
<强> [编辑] 强>
我错误地假设PathMatchSpec
共享FindFirstFile/FindNextFile的属性。我跑过几次测试 - 但事实并非如此。所以看起来它是最好的候选人。
答案 1 :(得分: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ü
答案 2 :(得分:5)
最简单的方法是将您的glob模式转换为正则表达式,遵循以下规则:
*
变为.*
?
变为.
\|.^$+()[]{}
\
进行转义
部分正确。
以下规则是从XP +命令提示符中的DIR行为导入的:
*
与*.*
相同,并成为正则表达式.+
?
成为正则表达式.?
,除非后跟非通配符
?
后面没有通配符变为正则表达式.
*.
表示“无延期”,并变为[^.]+$
答案 3 :(得分:4)
答案 4 :(得分:3)
FindFirstFile
和FindNextFile
API执行通配符匹配,但仅针对文件名。
您不能使用任何但Win32? STL或CRT怎么样?你在使用Boost吗?
如果没有Win32 API限制,我建议使用某些开源项目中的代码。另一种选择是将glob转换为正则表达式,我相信可以通过正则表达式替换操作来完成。
编辑:首先谷歌匹配是PHP代码:
答案 5 :(得分:0)
您的要求到底是什么?您是否只想使用''符号匹配0个或更多字符,或者您打算使用'?'符号也是。如果只是'',您是否需要查找 a,, b, b * c等类型模式?如果您的要求有限,您可以轻松地使用C ++运行时库的strstr函数。