Magic Quadrant™ pour la gestion des accès privilégiés 2025 : Netwrix reconnue pour la quatrième année consécutive. Téléchargez le rapport.

Plateforme
Centre de ressourcesBlog
Expressions régulières pour débutants : Comment commencer à découvrir des données sensibles

Expressions régulières pour débutants : Comment commencer à découvrir des données sensibles

May 29, 2019

Toute solution de découverte et de classification des données repose fortement sur les expressions régulières (parfois appelées RegExes, REs ou motifs RegEx) pour identifier les données sensibles. Mais que sont les RegExes et comment peuvent-elles être utilisées pour découvrir des données sensibles ? Découvrons-le.

Les expressions régulières sont un petit langage de programmation très spécialisé ; elles sont en gros des caractères jokers sous stéroïdes. En utilisant ce petit langage, vous spécifiez des règles qui définissent les chaînes de caractères que vous souhaitez correspondre. Par exemple, vous pouvez définir une RegEx qui correspondra aux adresses e-mail, aux informations personnellement identifiables, aux informations de santé protégées ou aux numéros de carte de crédit.

Composants Regex

Une expression régulière peut inclure des littéraux et des métacaractères.

Littéraux

Tout caractère unique, à l'exception de ceux réservés comme métacaractères, est déjà une expression régulière en soi. Par exemple, www est une correspondance pour www.Netwrix.com mais wwz ne l'est pas. Notez que les expressions régulières sont sensibles à la casse, donc www ne correspondra pas à WWW ni à wWw.

Métacaractères

Les caractères uniques suivants ne sont pas interprétés littéralement mais ont des significations particulières :

  • . ^ $ * + ? { } [ ] | ( )

Le tableau suivant décrit comment chacun de ces métacaractères fonctionne.

Tapez

Méta-caractères

Description

Exemples

Le point

.

Le point signifie n'importe quel caractère.

net.rix correspondra à la fois à www.netwrix.com et à www.netfrix.com.

Classe de personnage

[]

Correspondances pour tout ce qui est à l'intérieur des crochets. L'unique exception est le caractère ^. À l'intérieur d'une classe, au début, le ^ signifie exception de la recherche. Par exemple, [^n] correspondra à n'importe quel caractère sauf n ; ceci est appelé une classe de caractères négatifs.
Notez que les métacaractères (à une exception près) ne sont pas actifs à l'intérieur des classes. Par exemple, [net$] correspondra à l'un des caractères n, e, t ou $ ($ est un métacaractère, mais à l'intérieur d'une classe de caractères, il ne correspond qu'au $).
L'unique exception est le caractère ^. À l'intérieur d'une classe, au début, le ^ signifie exception de la recherche. Par exemple, [^n] correspondra à n'importe quel caractère sauf n; ceci est appelé une classe de caractères négatifs.

Vous pouvez lister les caractères individuellement ; par exemple, Netwrix correspondra à netw , netr et netx mais pas à netz.
Ou vous pouvez rechercher une plage de caractères en donnant deux caractères et en les séparant par un trait d'union ; par exemple, Netwrix correspondra à neta, netw et netf mais pas à net1.

Ancres

^

Utilisé pour faire correspondre des caractères au début d'une chaîne

^https correspondra à https://netwrix.com mais pas à www.netwrix.com ni à http://netwrix.com

$

Utilisé pour faire correspondre des caractères à la fin d'une chaîne

com$ correspondra à www.netwrix.com ou telecom mais pas à computer.

Itération / quantificateurs

?

Correspond à l'élément précédent zéro ou une fois (il correspondra toujours si le caractère n'a pas été trouvé). C'est idéal pour trouver des caractères optionnels.

colou?r correspondra à la fois à color et à colour.

*

Correspond à l'élément précédent zéro ou plusieurs fois au lieu de zéro ou une fois. C'est idéal pour trouver des séries de caractères optionnelles.

ne*t correspondra à nt (zéro caractère e), net (un e), neeet (trois caractères e), et ainsi de suite.

+

Correspond à l'élément précédent une ou plusieurs fois.
Faites attention à la différence entre * et +. * correspond à zéro ou plusieurs fois, donc ce qui est répété peut ne pas être présent du tout ; + exige au moins une occurrence.

ne+t correspondra à net et à neeet mais pas à nt.

|

L'opérateur de choix correspond soit à l'expression avant soit à l'expression après l'opérateur.

Netwrix correspondra à Netwrix et à Netwrix.

{}

{x} correspond si l'élément qui le précède est trouvé exactement x fois.
{x,y} correspond si l'élément précédent est trouvé au moins x fois mais pas plus de y fois.

n{3} correspondra à nnn, nnnn et nnnd (car ils contiennent tous n trois fois de suite), mais cela ne correspondra pas à nnw.
9{3} correspondra à 999, 1234999124 et text999text, mais pas à 84299238, 9909, ni à page992.
n{3,5} correspondra à nnn, nnnn et nnnnn.

Bloquer et capturer

()

Définit une sous-expression qui peut être rappelée plus tard en utilisant un raccourci : La première sous-expression entre parenthèses peut être rappelée par \1, la seconde peut être rappelée par \2 et ainsi de suite.
Les parenthèses sont normalement utilisées soit avec | (l'opérateur de choix) à l'intérieur, soit avec des quantificateurs à l'extérieur.

Gr(a|e)y correspondra à Gray ou Grey.
[0-9]([-])[0-9]\1[0-9] correspondra à 3-4-2 et 4-6-1, mais pas à 1-23, 42-1 ou 234.

Séquence d'échappement

\

Le métacaractère qui suit la barre oblique sera utilisé comme un littéral.
Notez que certaines séquences commençant par \ ne sont pas des séquences d'échappement. Au lieu de cela, elles représentent des ensembles prédéfinis de caractères qui sont souvent utiles, tels que l'ensemble des chiffres, l'ensemble des lettres, ou l'ensemble de tout ce qui n'est pas un espace blanc. Les plus populaires sont listés ci-dessous en tant que « métacaractères spéciaux ».

www\.netwrix\.com correspondra à www.netwrix.com mais pas à www,netwrix,com.

Des métacaractères spéciaux

\s

Correspond à tout caractère d'espacement (un espace, une tabulation, un saut de ligne ou un saut de page).

Netwrix Auditor correspondra à Netwrix Auditor, et à Netwrix Auditor, mais pas à Netwrix Auditor ni à Netwrix Auditor.

\S

Correspond à tout caractère non-espaces.

\Snetwrix correspondra à Xnetwrix et à 1netwrix.

\w

Correspond à tout caractère alphanumérique.

\w\w\w correspondra à net, dfw et Netwrix.

\W

Correspond à tout caractère non alphanumérique.

Netwrix correspondra à Netwrix et à Netwrix.

\d

Correspond à n'importe quel chiffre décimal.

Netwrix\d\d correspondra à Netwrix80 et à Netwrix90.

\D

Correspond à tout caractère non numérique.

Netwrix correspondra à Netwrix et à Netwrix.

\a

Correspond à n'importe quel caractère alphabétique unique, majuscule ou minuscule.

Netwrix correspondra à Netwrix, netfrix et netarix.

\b

Définit une limite de mot.

\brix correspondra à rix et rixon mais pas à Netwrix.

\B

Définit une limite qui n'est pas un mot

\Brix correspondra à Netwrix et à trix mais pas à rixon.

Combinaisons de métacaractères

Nous connaissons maintenant presque tous les métacaractères et sommes prêts à les combiner.

Exemple : Recherche de numéros de plaque d'immatriculation

Supposons que nous devons trouver un numéro de licence au format aaa-nnnn — les trois premiers caractères doivent être alphanumériques et les quatre derniers doivent être numériques. Le trait d'union peut être remplacé par n'importe quel caractère ou être complètement absent.

L'expression régulière pour cela sera :

  • b[0-9A-Z]{3}([^ 0-9A-Z]|s)?[0-9]{4}b

Décortiquons cette RegEx :

  • b nécessite une limite de mot, donc les chaînes correspondantes ne peuvent pas faire partie d'une chaîne plus grande.
  • [0-9A-Z]{3} signifie que les trois premiers caractères doivent être alphanumériques.
  • ([^ 0-9A-Z]|s)? signifie que la partie suivante de la chaîne doit être soit un délimiteur — un caractère non alphanumérique ou un espace — soit rien du tout.
  • [0-9]{4} signifie que la partie suivante de la chaîne doit être de 4 chiffres.
  • b indique une autre limite de mot.

Cette expression régulière correspondra aux numéros de licence suivants : NT5-6345, GH3 9452, XS83289

Cependant, cela ne correspondra pas à ces numéros de licence : ZNT49371, HG3-29347, nt4-9371

Exemple : Recherche de numéros de sécurité sociale

Un autre bon exemple est le numéro de sécurité sociale des États-Unis (SSN), qui prend toujours la forme nnn-nn-nnnn.

Le RegEx le plus simple est le suivant :

  • [0-9]{3}-[0-9]{2}-[0-9]{4}

Cependant, cela générera des faux positifs, car tous les numéros ayant cette forme ne sont pas de véritables SSN. De plus, cela manquera certains SSN réels, y compris ceux qui sont écrits sans les traits d'union. Pour obtenir des résultats plus précis, nous devrions en construire un plus complexe. Nous savons que :

  • Aucun groupe de chiffres ne peut être composé uniquement de zéros.
  • Le premier bloc ne peut pas être 666 ou 900-999.
  • Les numéros de sécurité sociale peuvent être écrits avec des caractères d'espacement au lieu de traits d'union, ou sans aucun délimiteur.
  • Si le premier bloc commence par un 7, il doit être suivi d'un chiffre entre 0 et 6 puis n'importe quel troisième chiffre.

Par conséquent, l'expression régulière avancée ressemblera à ceci :

  • b(?!000|666|9d{2})([0-8]d{2}|7([0-6]d))([-]?|s{1})(?!00)dd2(?!0000)d{4}b

Comme auparavant, b au début et à la fin spécifie une limite de mot. Examinons plus en détail chaque bloc de chiffres intermédiaire.

Le premier bloc

  • (?!000|666|9d{2}) est une anticipation négative qui spécifie que le numéro ne doit pas commencer par 000, 666, ou 9 suivi de n'importe quels deux chiffres.
  • ([0-8]d{2} indique que la chaîne doit commencer par un chiffre entre 0 et 8 et avoir deux chiffres supplémentaires (0-9) après.
  • |7[0-6]d)) indique que cela commence par 7, le chiffre suivant doit être entre 0 et 6, suivi de n'importe quel chiffre.
  • ([-]?|s{1}) indique qu'après les trois chiffres, il doit y avoir soit un trait d'union, un caractère d'espacement ou rien du tout pour marquer la fin du premier bloc.

Le deuxième bloc

  • (?!00) est un autre look-ahead négatif qui spécifie qu'il ne doit pas y avoir 00 dans le second bloc.
  • dd indique qu'il doit y avoir deux chiffres quelconques dans le deuxième bloc.
  • 2 correspond au même texte que le deuxième groupe de capture, qui est ([-]?|s{1}), donc cela spécifie que le deuxième bloc peut se terminer par un trait d'union, un caractère d'espacement ou aucun caractère supplémentaire.

Le troisième bloc

  • (?!0000) est un autre look-ahead négatif qui spécifie qu'il ne peut pas y avoir quatre zéros dans le troisième bloc.
  • d{4} nécessite quatre chiffres dans le troisième bloc du numéro de sécurité sociale.

Exemples de RegExes populaires

Pour trouver

Utilisez cette RegEx

Exemple de correspondance

Adresses e-mail

^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}$

T.Simpson@netwrix.com

Numéros de sécurité sociale des États-Unis

\b(?!000|666|9\d{2})([0-8]\d{2}|7([0-6]\d))([-]?|\s{1})(?!00)\d\d\2(?!0000)\d{4}\b

513-84-7329

Adresses IPV4

^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}$

192.168.1.1

Dates au format MM/JJ/AAAA

^([1][12]|[0]?[1-9])[\/-]([3][01]|[12]\d|[0]?[1-9])[\/-](\d{4}|\d{2})$

05/05/2018

Numéros de MasterCard

^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$

5258704108753590

Numéros de carte Visa

\b([4]\d{3}[\s]\d{4}[\s]\d{4}[\s]\d{4}|[4]\d{3}[-]\d{4}[-]\d{4}[-]
\d{4}|[4]\d{3}[.]\d{4}[.]\d{4}[.]\d{4}|[4]\d{3}\d{4}\d{4}\d{4})\b

4563-7568-5698-4587

Numéros de carte American Express

^3[47][0-9]{13}$

34583547858682157

Codes postaux des États-Unis

^((\d{5}-\d{4})|(\d{5})|([A-Z]\d[A-Z]\s\d[A-Z]\d))$

97589

Chemins de fichiers

\\[^\\]+$

\\fs1\partagé

URLs

(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+
|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))

www.netwrix.com

Ressources web utiles pour Regex

  • https://regexr.com et https://regex101.com vous aideront à vérifier vos RegExes en mettant en évidence la syntaxe et les infobulles.
  • https://regexcrossword.com est un jeu de mots croisés où les indices sont définis à l'aide d'expressions régulières.
  • https://www.regular-expressions.info est un excellent site avec des informations sur les expressions régulières. De plus, l'outil Notepad++ dispose d'une extension d'assistance RegEx qui vous sera très utile lorsque vous travaillez avec des expressions régulières.

Partager sur

En savoir plus

À propos de l'auteur

Asset Not Found

Jeff Melnick

Directeur de l'ingénierie des systèmes

Jeff est un ancien directeur de l'ingénierie des solutions mondiales chez Netwrix. Il est un blogueur, conférencier et présentateur de longue date chez Netwrix. Dans le blog Netwrix, Jeff partage des astuces et des conseils qui peuvent améliorer de manière significative votre expérience en administration système.