Je cherche une API de chaîne de chaîne générique (NOT REGEX MATCH). Je ne peux rien utiliser d'autre que Win32 API. P>
6 Réponses :
the FindFirstFile code>
et FindNextFile code >
API Les API font des allumettes de caractères génériques, mais uniquement contre les noms de fichiers. P>
Vous ne pouvez pas utiliser rien em> mais win32? Qu'en est-il de STL ou CRT? Utilisez-vous boost? P>
Sans la restriction de l'API Win32, je vous recommanderais d'utiliser le code à partir d'un projet open-source. Une autre option serait de traduire le GLOB en une regex, ce qui, selon moi, peut être fait avec une opération de remplacement de regex. P>
Modifier: le premier match Google est le code PHP: p>
Quelle est exactement votre exigence? Voulez-vous simplement utiliser le symbole '' pour correspondre à 0 ou plus de caractères ou vous planifiez-vous d'utiliser le '?' symbole aussi. Si c'est juste ' em>', devez-vous rechercher a, un em>, un B, un em> b * c, etc types de motifs? Si votre exigence est limitée, vous pouvez facilement vous éloigner de la fonction Strstr de la bibliothèque C ++. P>
La chose la plus facile serait de convertir votre modèle global en une regex, par les règles suivantes: p>
* code> devient . * code> li>
-
? code> devient . code> li>
- n'importe lequel de
\ | ^ $ + () [] {} code> est échappé en les précédant avec \ code> li> li>
ul>
Ceci est en partie vrai.
Les règles suivantes sont intronisées du comportement DIR dans l'invite de commande XP +:
* code> est identique que *. * code> et devient regex . + code>
? code> devient regex .? code> sauf s'il est suivi d'un non-caractères
? code> non suivi d'une générique devient regex . code>
*. code> signifie "sans extension" et devient [^.] + $ code>
p>
Il y a pathmatchspec - mais manipulation est spécialisé pour les fichiers, les résultats peuvent donc ne pas être ce que vous attendez si vous avez besoin d'une correspondance générale générale. P>
Sinon, vous devriez probablement aller avec une regex, car Pavel détaillé. p>
pathmatchspec code> partage les propriétés de FindFirstFile / FindNextFile . J'ai couru quelques tests - ça ne le fait pas. Donc, cela ressemble au meilleur candidat. P>
Une trouvaille très intéressante. Je me demande comment est cette chose spécialisée pour les chemins, cependant (si cela est effectivement).
Pavel, j'ai vérifié - la manipulation spéciale est uniquement dans FindFirst / NextFile. Yay! :RÉ
Quelle est la manipulation spéciale? Je ne vois pas pourquoi ce ne serait pas pareil? Vous voulez dire que cela s'applique à la partie nom de fichier uniquement dans FindFirst / NextFile?
@Paulm: Une autre chose est assortie par ex. x.htm to * .html si 8.3 noms est activé. blogs.msdn.com/b/oldnewthing/archive/ 2005/07/20 / 440918.aspx
étrange que tant d'années passaient et personne ne vous a donné cette réponse: p>
Il y a une API Win32 qui fait exactement ce que vous recherchez. (Je l'ai trouvé à la recherche dans le MSDN pour "Wildcard") P>
Son nom est Mettez une critique sur l'appel de l'API si votre application est mulithreaded! p>
http: // msdn.microsoft.com/en-us/library/windows/desktop/ms681355%28v=vs.85%29.aspx P>
L'API que elmü p> symmatchstring () code>. Il est assis dans dbghelp.dll qui fait partie du système d'exploitation. p>
FindFirstFile () code> utilise en interne pour des correspondances Wildcard est probablement
fsrtlisnameExpression () code>. p>.
DBGHELP peut faire partie du système d'exploitation. Malheureusement, la SP a ceci à dire: " Bien que cette DLL soit incluse dans toutes les versions prises en charge de Windows, il s'agit rarement de la version la plus récente de DBGHELP disponible. En outre, la version de DBGHELP que navigué dans Windows a réduit la fonctionnalité de la Autres sorties-- Spécifiquement, il manque de prise en charge du serveur de symboles et du serveur source. Code> "Personnellement, je ne me sentirais pas particulièrement confortable de déployer une solution à l'aide de cette API dans de telles conditions.
Combien d'applications doivent exécuter sur SymbolServer ou Storesserver? Si vous vous inquiétez vraiment de cela, vous pouvez installer une version connue de DBGHELP.DLL dans le dossier de votre programme, ce sera chargé au lieu de la DLL du système d'exploitation.
Qu'entendez-vous par «Match de chaîne Wildcard»? S'il vous plaît donner des exemples.
Exemples ou (de préférence) une spécification. Si vous voulez dire des règles identiques pour produire des caractères génériques sur Windows, mais ne le disons pas explicitement, alors généralement Neil appuiera pour une meilleure exigence doc ;-) aussi, cela me survient que
* code> et
? Code> Dans File Globs ne correspond pas au caractère Backslash - cela pourrait affecter la réponse si vous souhaitez ou non ce comportement.