begin process at 2010 03 21 20:31:47
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Texte

 > MATCHESMASK ET LES EXPRESSIONS RÉGULIÈRES.

MATCHESMASK ET LES EXPRESSIONS RÉGULIÈRES.


 Information sur la source

Note :
Aucune note
Catégorie :Texte Classé sous :matchesmask, regexp, mask, masque, dichotomie Niveau :Débutant Date de création :02/08/2007 Vu / téléchargé :5 766 / 322

Auteur : Caribensila

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note


 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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture LES FIBERS : DES THREADS NON PRÉEMPTÉS PAR LE SYSTÈME
Source avec Zip SCANNER ALEATOIREMENT TOUS LES PIXELS D'UN BITMAP
Source avec Zip Source avec une capture TEXTE GRAPHIQUE AVEC "VRAIE" OMBRE.
Source avec Zip CALCULER LES PERFORMANCES DES THREADS
Source avec Zip Source avec une capture TRAITEMENT DE TRAITEMENTS LONGS.

 Sources de la même categorie

Source avec Zip COMBINAISONS DE STRINGS par askil2000
Source avec Zip Source avec une capture RECONNAISSANCE DE CARACTÈRES (OCR) par Bacterius
Source avec Zip Source avec une capture NETTOYAGE AUTOMATIQUE DE NOMS DE FICHIERS par John Dogget
DISTANCE DE JARO-WINKLER par PoulpHunter
Source avec Zip BASE DE DONNÉE WIKI par thithony

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture TEXTE GRAPHIQUE AVEC "VRAIE" OMBRE. par Caribensila
Source avec Zip RECHERCHE DICHOTOMIQUE (EXEMPLE AVEC UN TABLEAU) par Nicolas___
FONCTION DICHOTOMIE CALCUL NUMÉRIQUE par billegate2006
Source avec Zip Source avec une capture EXTRACTEUR INTELLIGENT DE CHAINE AVEC DÉLIMITEUR (EXTRACTION... par Filipe35

Commentaires et avis

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é.

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.

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.

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.

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

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 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...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales