J'ai utilisé pour utiliser une bibliothèque d'hyperstr pour la routine de traitement de chaîne. Maintenant, j'utilise plus New Delphi. J'ai besoin de rechercher un modèle dans une chaîne, par exemple, l'ancienne fonction est mon ancien code (retourne vrai): P> iSmatchex (const Source, Recherche: Ansistration; Var Démarrer: Integer): Integer; Code>. En fait, je n'ai pas besoin de la valeur de résultat, je veux juste savoir si le motif correspond à la chaîne ou non.
if TRegEx.IsMatch('abcdef', 'abcd?f') then
showmessage('match');
3 Réponses :
La syntaxe d'expression régulière est différente. ? et * ont des significations différentes. Voir http://www.regular-expressions.info/tatudial.html pour une excellente introduction à des expressions régulières. Vous utiliseriez quelque chose d'ABCD [A-Z] F ou ABCD \ WF, ou même une autre syntaxe, selon ce que vous souhaitez faire correspondre. P>
+1 pour le lien que vous avez fourni seul. Je suggérerais également que si vous allez passer à tout moment avec Regexes, vous investissez dans une copie de Regexbuddy . C'est un outil inestimable pour créer et tester des expressions régulières. (Non affilié de quelque manière que ce soit - juste un client très heureux depuis des années maintenant.)
Si? Représenter un seul caractère: si? Représenter n'importe quelle piqûre: p> ne pas avoir xe donc pas testé. p> p>
Méfiez-vous du point ...;) régulier-expressions.info/dot.html , par exemple, cela correspondrait à ABCDEF, mais il correspondrait également à ABCD, F ABCD / F, ABCD (F, etc. Regex peut utiliser une syntaxe plus puissante pour obtenir exactement ce que vous devez faire correspondre.
@utilisateur '.' Ne correspondez pas si vous avez des caractèresWLINE, je pense que vous devez utiliser '[. \ N \ r]' à la place de '.' '
Hmm .. je pense qu'il n'y aura pas de nouvelle ligne. L'entrée est une chaîne hexagonale d'un fichier. D'une manière ou d'une autre, je pense que mon strohex code> a un résultat invalide, je dois donc la corriger d'abord et il est temps de rentrer chez vous! :)
Avec une entrée hexagone, vous voulez probablement utiliser la suggestion de Lddandon, pour correspondre à ce que vous voulez réellement. [0-9A-FA-F] * devrait correspondre à hexagone.
Le masque du premier exemple ne devrait-il pas être "ABCD?" plutôt que 'abcd.f'?
@drumzeuch 'abcd.?' accepterait la piqûre 'ABCD' puis éventuellement un autre caractère. Donc non, cela ne devrait pas être le masque autant que je comprenne la question initiale. Vous pouvez utiliser «ABCD.?F» si le point d'interrogation dans la question représente un caractère unique en option.
@MGh Désolé, j'ai dû être une mauvaise journée. Ce que j'ai écrit était des ordures.
Vous pouvez utiliser le masque pour correspondance générique: ismatch = true
(Code de constructeur C ++ est simplement transversal à Pascal) P> P>
Pense que vous utilisez '.' correspondre à un seul caractère.
Vraiment? MatchSmask Devrait I> a travaillé. Êtes-vous sûr que votre test était valide?
@Rob, je veux dire les matchsmask ne fonctionne pas dans mon vrai cas. En utilisant le point, mon problème a résolu. Désolé pour une réponse tardive parce que je dois corriger certains codes afin que je puisse essayer la réponse de la MGH.