IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
logo

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.

SommaireExpressions r�guli�res (9)
pr�c�dent sommaire suivant
 

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.

Mis � jour le 9 d�cembre 2015 Roland Chastain

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;
Appelez MatchesMask pour v�rifier un nom de fichier. Le param�tre Mask sert � d�crire les valeurs valides. Un masque valide est compos� de caract�res litt�raux, d'ensembles de caract�res et de m�tacaract�res (wildcards).

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.
Il est � noter que le param�tre FileName n'est pas n�cessairement un nom de fichier. MatchesMask peut �tre utilis�e pour v�rifier la conformit� d'une cha�ne quelconque avec un masque correctement form�.

Mis � jour le 7 octobre 2015 Roland Chastain

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.
Pour s'assurer que la cha�ne enti�re (et non pas seulement l'une de ses parties) appartient � l'ensemble, on utilise les m�tacaract�res repr�sentant le d�but et la fin de la cha�ne, � savoir l'accent circonflexe (^) et le dollar ($).

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

Mis � jour le 10 d�cembre 2015 Roland Chastain

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.

Mis � jour le 10 d�cembre 2015 Roland Chastain

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.
Si votre version de Delphi est ant�rieure � la version XE, vous devez t�l�charger l'unit� PerlRegEx et ajouter le chemin de l'unit� dans les options du projet.

Mis � jour le 10 d�cembre 2015 Roland Chastain

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.

Mis � jour le 10 d�cembre 2015 Roland Chastain

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.

Mis � jour le 28 septembre 2016 Roland Chastain

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.
La deuxi�me solution est de d�clarer un objet de la classe IMatchCollection, qui sera cr�� en faisant appel � la m�thode Matches() de la classe IRegex.

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;

Mis � jour le 28 septembre 2016 Laurent Dardenne Roland Chastain

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;

Mis � jour le 9 f�vrier 2019 Charly910

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 �a


R�ponse � la question

Liens sous la question
pr�c�dent sommaire suivant
 

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