
FAQ DelphiConsultez toutes les FAQ
Nombre d'auteurs : 125, nombre de questions : 943, derni�re mise � jour : 25 juillet 2025 Ajouter une question
Cette FAQ a �t� r�alis�e � partir des questions fr�quemment pos�es sur les forums Delphi et Delphi et bases de donn�es de www.developpez.com et de l'exp�rience personnelle des auteurs.
Nous tenons � souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne pr�tend pas non plus �tre compl�te. Si vous souhaitez y apporter des corrections ou la compl�ter, contactez un responsable (lien au bas de cette page).
Nous esp�rons que cette FAQ saura r�pondre � vos attentes. Nous vous en souhaitons une bonne lecture.
L'�quipe Delphi de Developpez.com.
- Comment utiliser les expressions r�guli�res avec Delphi ?
- Comment utiliser la fonction MatchesMask ?
- Comparer une cha�ne � un motif avec la classe TRegEx de l'unit� RegularExpressions
- Extraire les multiples occurrences d'un motif avec la classe TRegEx de l'unit� RegularExpressions
- Comparer une cha�ne � un motif avec la classe TPerlRegEx de l'unit� PerlRegEx
- Extraire les multiples occurrences d'un motif avec la classe TPerlRegEx de l'unit� PerlRegEx
- Comparer une cha�ne � un motif avec la classe IRegex de l'unit� PCRE
- Extraire les multiples occurrences d'un motif avec la classe IRegex de l'unit� PCRE
- Test de validit� d'une adresse e-mail
Il y a plusieurs fa�ons d'utiliser les expressions r�guli�res avec Delphi.
Si vous poss�dez Delphi XE ou une version post�rieure, le plus simple est d'utiliser l'unit� System.RegularExpressions.
Si vous poss�dez une version ant�rieure � Delphi XE, plusieurs possibilit�s s'offrent � vous. Le choix peut-�tre le plus recommandable est d'utiliser la classe TPerlRegEx de l'unit� PerlRegEx. L'avantage de cette unit� est d'�tre identique � l'unit� System.RegularExpressionsCore livr�e avec les versions r�centes de Delphi (� partir de Delphi XE). Votre code sera donc r�utilisable en cas de migration vers une version plus r�cente.
Une autre possibilit� est d'utiliser la classe TRegExpr de l'unit� RegExpr. L'avantage de cette unit� est d'�tre identique � l'unit� du m�me nom livr�e avec Free Pascal. Toutefois cette unit� n'est pas compatible avec les versions r�centes de Delphi.
Une autre possibilit� encore est d'utiliser la classe IRegex de l'unit� PCRE. Il s'agit d'une unit� pour Delphi 7, qui peut �galement �tre compil�e avec Free Pascal.
Une autre possibilit� enfin est d'utiliser la classe TFLRE de l'unit� FLRE. L'avantage de cette biblioth�que est, outre sa rapidit�, le fait qu'elle soit compatible aussi bien avec Delphi ancienne et nouvelle g�n�ration qu'avec Free Pascal.
La fonction MatchesMask de l'unit� System.Masks indique si un nom de fichier est conforme au format sp�cifi� par une cha�ne filtre.
Code : | S�lectionner tout |
function MatchesMask(const Filename, Mask: string): Boolean;
Un caract�re litt�ral correspond � un et un seul caract�re de la cha�ne examin�e. La comparaison des caract�res litt�raux est insensible � la casse.
Un ensemble commence par un crochet ouvrant ([) et se termine par un crochet fermant (]). Entre les crochets se trouvent les �l�ments de l'ensemble. Chaque �l�ment est un caract�re litt�ral ou un intervalle. Les intervalles sont sp�cifi�s par une valeur initiale, un trait d'union (-) et une valeur finale. N'utilisez ni espaces ni virgules pour s�parer les �l�ments de l'ensemble. Un intervalle correspond � un et un seul caract�re de la cha�ne examin�e. Un caract�re appartient � un ensemble s'il est identique � l'un des caract�res litt�raux de l'ensemble ou s'il est compris dans l'un des intervalles de l'ensemble. Un caract�re est compris dans un intervalle s'il est identique � la valeur initiale, ou � la valeur finale, ou � une valeur interm�diaire. Les comparaisons sont insensibles � la casse. Si le premier caract�re apr�s le crochet ouvrant est un point d'exclamation (!), l'ensemble repr�sente tous les caract�res n'appartenant pas � l'ensemble.
Les m�tacaract�res sont l'ast�risque (*) et le point d'interrogation (?). Un ast�risque repr�sente un nombre quelconque de caract�res quelconques. Le point d'interrogation repr�sente un et un seul caract�re quelconque.
MatchesMask renvoie true si la cha�ne examin�e est conforme au masque, false dans le cas contraire. MatchesMask d�clenche une exception si le masque lui-m�me n'est pas valide d'un point de vue syntaxique.
Code : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | program MatchesMask1; {$APPTYPE CONSOLE} uses SysUtils, Masks; const NAME = 'fichier1.ext'; begin WriteLn(MatchesMask(NAME, 'FICHIER1.EXT')); { Pas de diff�rence entre majuscules et minuscules. } WriteLn(MatchesMask(NAME, 'fichier[12].ext')); { Ensemble contenant '1' et '2'. } WriteLn(MatchesMask(NAME, 'fichier[0-3].ext')); { Ensemble contenant les caract�res de '0' � '3'. } WriteLn(MatchesMask(NAME, '*.ext')); { Un nombre ind�fini de caract�res quelconques. } WriteLn(MatchesMask(NAME, 'fichier?.ext')); { Un caract�re quelconque. } WriteLn(MatchesMask(NAME, 'fichier1*.ext')); { Un nombre ind�fini, y compris z�ro. } WriteLn(MatchesMask(NAME, 'fichier1?.ext') = FALSE); { Un et un seul caract�re. } WriteLn(MatchesMask(NAME, 'fichier[!0].ext')); { Un caract�re qui n'est pas '0'. } ReadLn; end. |
La fonction IsMatch de la classe TRegEx indique si une cha�ne de caract�re donn�e (ou l'une de ses parties) appartient � l'ensemble d�fini par une expression r�guli�re.
Code : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | program RegularExpressions1; {$APPTYPE CONSOLE} uses System.RegularExpressions; begin WriteLn(TRegEx.IsMatch('bonjour', '\w')); { un caract�re alphanum�rique } WriteLn(TRegEx.IsMatch('bonjour', '\w+')); { un ou plusieurs caract�res alphanum�riques } WriteLn(TRegEx.IsMatch('bonjour', '\w*')); { z�ro ou plus } WriteLn(TRegEx.IsMatch('bonjour', '\w{7}')); { sept } WriteLn(TRegEx.IsMatch('bonjour', '[a-z]{7}')); { sept minuscules } WriteLn(TRegEx.IsMatch('bonjour', '\d') = FALSE); { un chiffre } WriteLn(TRegEx.IsMatch('bonjour', '\s') = FALSE); { un espace au sens large } WriteLn(TRegEx.IsMatch('bonjour', '\D')); { un caract�re qui n'est pas un chiffre } ReadLn; end. |
Code : | S�lectionner tout |
1 2 | WriteLn(TRegEx.IsMatch('bonjour', '^\w$') = FALSE); { Il y a plus d'un caract�re alphanum�rique entre le d�but et la fin de la cha�ne. } |
Pour extraire les multiples occurrences d'un motif dans une cha�ne, on utilise une variable de type TMatch, en combinaison avec les fonctions Match et NextMatch de la classe TRegEx.
L'exemple suivant extrait les nombres d'une cha�ne donn�e.
Code : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | program RegularExpressions2; {$APPTYPE CONSOLE} uses System.SysUtils, System.RegularExpressions; var match: TMatch; begin match := TRegEx.Match('10 +10 0.5 .5', '\s*[-+]?[0-9]*\.?[0-9]+\s*'); while match.Success do begin WriteLn(match.Value); match := match.NextMatch; end; ReadLn; end. |
L'unit� PerlRegEx est identique � l'unit� RegularExpressionsCore livr�e avec Delphi � partir de la version XE. Le m�me code peut donc �tre compil� avec l'une ou l'autre de ces unit�s.
Voici un programme qui indique si un motif donn� (en l'occurrence une date) se trouve dans une cha�ne.
Code : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | program PerlRegEx1; {$APPTYPE CONSOLE} uses SysUtils, {$IF CompilerVersion >= 22.0} RegularExpressionsCore; {$ELSE} PerlRegEx; (* http://www.regular-expressions.info/download/TPerlRegEx.zip *) {$IFEND} var expr: TPerlRegEx; begin expr := TPerlRegEx.Create; expr.Subject := '10/12/2015'; expr.RegEx := '\d{2}/\d{2}/\d{4}'; if expr.Match then WriteLn(expr.MatchedText); expr.Free; ReadLn; end. |
Pour extraire les multiples occurrences d'un motif dans une cha�ne, on utilise les fonctions Match et MatchAgain.
Code : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | program PerlRegEx2; {$APPTYPE CONSOLE} uses SysUtils, Classes, {$IF CompilerVersion >= 22.0} RegularExpressionsCore; {$ELSE} PerlRegEx; (* http://www.regular-expressions.info/download/TPerlRegEx.zip *) {$IFEND} var expr: TPerlRegEx; begin expr := TPerlRegEx.Create; expr.RegEx := '\d{2}/\d{2}/\d{4}'; expr.Subject := '10/12/2015 11/12/2015'; if expr.Match then repeat WriteLn(expr.MatchedText); until not expr.MatchAgain; expr.Free; ReadLn; end. |
Pour chercher un motif dans une cha�ne de caract�res sans extraire la sous-cha�ne correspondante, on utilise la m�thode IsMatch() de la classe IRegex.
Code : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 | uses pcre; { http://renatomancuso.com/software/dpcre/dpcre.htm } var regex: IRegex; begin regex := RegexCreate('^\d{4}$'); WriteLn(regex.IsMatch('2016')); // TRUE end. |
Pour extraire d'une cha�ne les multiples occurrences d'un motif, la premi�re solution est de relancer la recherche autant de fois que n�cessaire, en passant � la m�thode Match(), comme second param�tre, la position � partir de laquelle la recherche doit commencer.
Code : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | uses pcre; var aiguille, meule_de_foin: ansistring; regex: IRegex; resultat: IMatch; position: longint; begin aiguille := '\d'; meule_de_foin := '_2_0_1_6_'; regex := RegexCreate(aiguille); position := 0; resultat := regex.Match(meule_de_foin, position); while resultat.Success do begin WriteLn(resultat.Value); position := resultat.Groups[0].Index + resultat.Groups[0].Length; resultat := regex.Match(meule_de_foin, position); end; end. |
Code : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | procedure TForm1.Button1Click(Sender: TObject); var re: IRegex; mc: IMatchCollection; iMatch: Integer; resultat: string; begin re := RegexCreate('([^\.]*)\.pas'); mc := re.Matches('qsdsdq.pas; aeze.pas'); for iMatch := 0 to mc.Count - 1 do begin Memo1.Lines.Add(mc.Items[iMatch].Value); end; end; |
Bonjour,
je propose une nouvelle FAQ :
Dans la cat�gorie : Expressions r�guli�res
Titre : Test de validit� d'une adresse e-mail
Pour tester la validit� d'une adresse mail, on peut utiliser les expressions r�guli�re.
Cette fonction renvoie True si l'adresse est valide :
Code : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Uses {$IF CompilerVersion >= 22.0} RegularExpressionsCore ; // pour Delphi XE et sup�rieur {$ELSE} PerlRegex ; // sur http://www.regular-expressions.info/download/TPerlRegEx.zip {$IFEND} ... Function IsValidMail(const s: string): boolean; // Test de la validit� d'une adresse e-mail Const RegEmail = '[_a-zA-Z\d\-\.]+@([_a-zA-Z\d\-]+(\.[_a-zA-Z\d\-]+)+)'; Var Expr: TPerlRegex; Begin Result := False ; Expr := TPerlRegex.Create; Try Expr.Subject := utf8string(s); Expr.RegEx := RegEmail ; Result := Expr.Match; Finally Expr.Free; End; End; |
Proposer une nouvelle r�ponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plut�t sur le forum de la rubrique pour �aLes sources pr�sent�es sur cette page sont libres de droits et vous pouvez les utiliser � votre convenance. Par contre, la page de pr�sentation constitue une �uvre intellectuelle prot�g�e par les droits d'auteur. Copyright � 2025 Developpez Developpez LLC. Tous droits r�serv�s Developpez LLC. Aucune reproduction, m�me partielle, ne peut �tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'� trois ans de prison et jusqu'� 300 000 � de dommages et int�r�ts.