Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MATCHESMASK ET LES EXPRESSIONS RÉGULIÈRES.


Information sur la source



Description

Cliquez pour voir la capture en taille normale
A part MaskEdit, on ne peut pas dire que Delphi nous offre beaucoup d'outils pour s'initier aux expressions régulières.
Il existe cependant une fonction méconnue, MatchesMask, qui permet de faire des choses intéressantes.
Voici un petit exemple d'utilisation de cette fonction. Cet exemple permet d'extraire des adresses IP ou des N° de téléphone à partir d'un texte quelconque.
MatchesMask nous permet de faire une recherche dans un String par dichotomie. Méthode beaucoup plus rapide qu'une recherche classique qui balaie toute la String.
MatchesMask a cependant un inconvénient. C'est qu'elle n'offre pas toute la souplesse proposée par les expressions régulières des autres langages. Par contre, elle a un avantage:  c'est que le masque est très simple à mettre en oeuvre et permet ainsi un début d'initiation facile aux regexp...

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Caribensila le 02/08/2007 19:40:09

Merci pour tes remarques toujours aussi pertinentes, Florent  :)

- Tu as raison, ça lit bêtement en-dehors de la chaîne. Le pire c'est que je m'en étais aperçu et que j'avais corrigé. Mais j'ai dû oublier de sauvegarder le changement ( quel con ce Cari! ).

- "Str(GetTickCount-Deb,S);" c'est juste pour éviter d'utilsiser l'unité 'SysUtils'. Ca m'énerve de rajouter une unité rien que pour une fonction ;)

- Je vais étudier TMask. Merci pour ce conseil.

- Je voulais parler des langages comme Perl où les expressions régulières font partie intégrante du langage; c'est plus simple à manipuler. Mais après vérification, tu as raison. Il semble bien que ce soit le seul langage offrant cette facilité.

signaler à un administrateur
Commentaire de Delphiprog le 05/08/2007 22:59:51 administrateur CS

Que de code pour valider une adresse IP !
De plus, si je n'ai pas lu trop vite le code, une adresse telle que 00.00.00.00 serait valide ?
Quant à valider une adresse IP V6, on en est loin.
Non, sérieusement, la fonction MatchesMask bien que très utile, atteint ses limites dans le cas présent.
Autant se tourner vers une bonne bibliothèque pour Delphi telle que Regexp Studio (libre et gratuite, pourquoi s'en priver ? http://www.regexpstudio.com/).

Florenth : c'est PCRE (Perl Compatible Regular Expressions) et non prce (voir http://en.wikipedia.org/wiki/PCRE)

Désolé d'avoir un peu cassé l'ambiance mais il m'a semblé nécessaire de remettre les choses dans leur contexte.
D'un côté on a une chaine à analyser et de l'autre, une expression régulière. Le moteur se charge alors de vérifier que le pattern est applicable à la chaine et d'en extraire une partie ou toutes les parties.
Dans le code de Caribensila, c'est une fonction dédiée à la vérification qui est codée. C'est peut-être plus performant pour cet usage, mais c'est moins souple et moins réutilisable sur le long terme.
D'où l'intérêt d'apprendre les expressions régulières même si ça parait rebutant au premier abord. Quand on les a manipulé un certain nombre de fois et qu'on pratique plusieurs langages, le savoir devient immédiatement réutilisable et ça, ça n'a pas de prix.

Allez, quelques bonnes pistes :
Quick reference : l'essentiel des regexp en une page
http://www.night-ray.com/regex.pdf
Pour le reste : http://tinyurl.com/2jwkgd

Bon, c'est encore les vacances pour certains. Si vous cherchez de la lecture intéressante, y a qu'à demander.

signaler à un administrateur
Commentaire de Caribensila le 06/08/2007 15:39:22

@Delphiprog

Tu casses pas l'ambiance, t'en mets!  lol
Et on a l'habitude et surtout le plaisir de se faire appeler 'Arthur' quand notre cher Delphiprog remet les pendules à l'heure car ce n'est jamais inutile.

D'autant que ce sont tes quelques réponses sur le forum au sujet des expressions régulières qui m'ont donné l'envie de les connaître et l'idée de les présenter aux autres débutants comme moi (y'a pas que des surdoués, ici). Mais je ne voulais pas les rebuter avec une bibliothèque dédiée et tout l'investissement en temps que ça demande. MatchesMask, dans sa simplicité était une bonne introduction j'ai pensé (voir l'exemple gerbant de Florenth avec regex).

De plus, comme le souligne Florenth, ce n'est pas un code d'extraction d'IP que j'ai posté. Tout au plus un code d'extraction de 'trucs qui ressemblent à des IP' (Comment savoir si 123.125.365.325 est une IP valide ou un N° de tél de Papouasie?). Ce n'était qu'un prétexte pour illustrer MatchesMask qui est peu connue. Et si on arrive aux limites de cette fonction, ça aura au moins servi à montrer MatchesMask() et ces limites.

Quant à valider une IPv6, j'y suis arrivé très facilement avec quelques changements triviaux dans les masques et la gestion des doubles-points qui se suivent. Et si j'y arrive, c'est que c'est pas difficile.  ;)

On est donc d'accord sur l'intérêt d'étudier les expressions régulières. Mais sans effrayer, en douceur.  :)))
Ensuite..?  Il y a les bonnes pistes que tu as signalées. Merci à toi et à Flo.

signaler à un administrateur
Commentaire de Delphiprog le 07/08/2007 09:24:55 administrateur CS

Mille excuses à vous deux mais je n'avais pas l'intention de froisser les esprits. Je sais fort bien que Caribensila n'est pas du genre à poster des codes à deux balles. Qu'il me pardonne s'il s'est senti offensé et je lui ferai parvenir une tarte au concombre pour me faire pardonner. :o)
Le message que j'ai voulu faire passer est l'intérêt, sur le long terme, de se pencher sur l'étude des expressions régulières du fait qu'elle sont disponibles dans quasiment tous les langages et presque universelles (différentes normes existent).
Le temps passé à écrire la fonction postée ici aurait été bien moindre avec les expressions régulières.
Le fait d'utiliser telle ou telle bibliothèque importe peu du moment que la bibliothèque en question respecte les normes "industrielles".

@florenth : pour info, voici l'expression que j'utilise pour valider une adresse IP V4 :
^(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}[01]?\d\d?|2[0-4]\d|25[0-5]$

Ceci démontre, par la même occasion, qu'il n'y a pas qu'une vérité et qu'on peut parvenir au résultat recherché de différentes manières.
Désolé, mais je n'ai pas mis de commentaire dans cette expression régulière.
Pour finir, je suis entièrement d'accord avec vous deux pour dire que la fonction MatchesMask est très largement méconnue et donc, à fortiori, sous utilisée. C'est bien dommage et merci à Caribensila de l'avoir remise au goût du jour.

signaler à un administrateur
Commentaire de Renfield le 07/08/2007 09:33:42 administrateur CS



ta regexp ne me convient pas tout a fait. Elle décrit :

255
comme étant une IP valide...

de plus, si je testes:
192.168.1.204

le '4' n'est pas dans le match

http://www.vbfrance.com/codes/REGEXP-WORKSHOP_17331.aspx

signaler à un administrateur
Commentaire de Renfield le 07/08/2007 18:09:20 administrateur CS

mon prog doit exister en delphi, .net, etc.

ce genre de choses :
((expr1)|(expr2)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

TEdit avec masque de saisie [ par lguez ] Existe t'il un composant dérivé de TEdit dans lequel on peut lui définir un masque de saisie.par exemple :avoir la possibilité de ne rentrer que des n XP look [ par magalie ] Parmis les centaines d'experts qui postent ici, y a t-il qqn qui pourrait m'expliquer comment "inhiber" le look du component XP manifest dans une Tab TMASKEDIT et calcul [ par MAISIZUN ] Salut, je recherche la solution pour saisir dans un masque un pourcentage et calculer automatiquement sa correspondance en coefficient. A chaque saisi masques [ par valkyrie ] Bonjour tout le mondej ai un probleme docteurj ai une imagej ai un masque que je dessine avec une fonctionmaintenant je veux appliquer le masque sur l Validation MaskEdit [ par lelahel08 ] Bonjour à tous,Voilà le problème :J'ai un MaskEdit représnetant un Code Postal (mon mask : 00000;0;_)Jusque la aucun soucis particulierpar contre si j Erreur sur Tmaskedit [ par zorville ] BonsoirComment faire pour gerer une erreur au niveau d'un masque de saisie sur Tmaskedit. En prenant comme exemple, le masque du téléphone, si je ne r comment faire un mask de saisie pour les champs de text ( base de donnees) [ par generalcomputer ] salutje veux developper une application en base de donnee en delphi j'ai un probleme concernant le remplissage de champs quant t'il y a uniquement&nbs mask edit et exception [ par deubal ] bonjour,je cherchais a mettre un masque sur une zone de saisie pour obliger l'utilisateur a saisir une date (format jj/mm/aaaa). trouvé sur le fo Formatage d'une chaine suivant un masque [ par AlexB59 ] Bonjour, j'ai une chaine c = '423c'. Je cherche à ce qu'à l'affichage j'obtienne '42.3 c' En Access, j'aurais utilsé la fonction format désactiver le masque de connexion à la bese de données SQL SERVER 2000 [ par liza06_1 ] Bonjour les ami(e)s, voila je travail avec DELPHI 7 sous sql server 2000 et quand je lance mon executable il y'a le masque de saisie  de la


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,624 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.