Es gibt PathMatchSpec - aber die Handhabung ist auf Dateien spezialisiert Ergebnisse sind möglicherweise nicht das, was Sie erwarten, wenn Sie einen allgemeinen Wildcard-Abgleich benötigen.
Andernfalls sollten Sie wahrscheinlich mit einer RegEx gehen, wie Pavel ausführlich beschrieben.
[Bearbeiten]
I falsch angenommen PathMatchSpec
teilt die Eigenschaften von FindFirstFile / FindNextFile . Ich habe ein paar Tests durchgeführt - das tut es nicht. Es sieht also nach dem besten Kandidaten aus.
Seltsam, dass so viele Jahre vergangen sind und niemand hat Ihnen diese Antwort gegeben:
Es gibt eine WIN32-API, die genau das tut, wonach Sie suchen. (Ich fand es in der MSDN nach "Wildcard" suchen)
Der Name ist SymMatchString()
. Es befindet sich in DbgHelp.dll, die Teil des Betriebssystems ist.
Fügen Sie eine CriticalSection um den API-Aufruf ein, wenn Ihre App mit mehreren Threads versehen ist!
Die API, die FindFirstFile()
intern für Wildcard-Übereinstimmungen verwendet, ist wahrscheinlich FsRtlIsNameInExpression()
.
Elmü
Am einfachsten wäre es, Ihr glob-Muster durch folgende Regeln in eine Regex zu konvertieren:
*
wird .*
?
wird .
\|.^$+()[]{}
werden mit Escapezeichen versehen, indem sie mit \
vorangestellt werden
Das ist teilweise richtig.
Folgende Regeln werden vom DIR-Verhalten in XP + Eingabeaufforderung aufgenommen:
*
ist das gleiche wie *.*
und wird Regex .+
?
wird regex .?
, wenn nicht gefolgt von einem Nicht-Platzhalter < br> ?
nicht gefolgt von einem Platzhalter wird Regex .
*.
bedeutet "ohne Erweiterung" und wird [^.]+$
Die FindFirstFile
und FindNextFile
APIs führen Wildcard-Übereinstimmungen aus, aber nur gegen Dateinamen.
Sie können nichts außer Win32 verwenden? Was ist mit STL oder CRT? Benutzt du Boost?
Ohne die Win32-API-Einschränkung würde ich empfehlen, den Code aus einem Open-Source-Projekt zu verwenden. Eine andere Option wäre, den Glob in eine Regex zu übersetzen, was meiner Meinung nach mit einer Regex-Ersetzungsoperation erledigt werden kann.
edit: Erste Google-Übereinstimmung ist der PHP-Code:
Was genau ist Ihre Anforderung? Möchten Sie nur das Symbol '' verwenden, um 0 oder mehr Zeichen zuzuordnen, oder planen Sie die Verwendung des '?' Symbol auch. Wenn es nur '' ist, müssen Sie nach a, a , b, a b * c usw. Muster suchen? Wenn Ihre Anforderung begrenzt ist, können Sie problemlos mit der STRST-Funktion der C ++ - Laufzeitbibliothek arbeiten.