Accueil·Expressions régulières

133 expressions régulières

De la notation jusqu’aux contrôles d’e-mails, de dates et d’adresses. Chaque expression est livrée avec des exemples qui doivent correspondre et d’autres non — et les tests les exécutent vraiment.

Notation28

Comment désigner un seul caractère. Tout le reste part de là.

Répétitions et groupes17

Combien de fois quelque chose se répète, et ce qui compte pour une unité.

Regarder autour8

Vérifie ce qui précède ou suit sans le consommer. Pratique pour empiler des conditions.

Contrôle de la chaîne entière44

Ancré aux deux bouts : la chaîne entière doit correspondre. C’est ce qu’utilise la validation.

^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$une adresse e-mail^https?://[^\s/$.?#][^\s]*$une adresse web^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$un nom de domaine^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$une adresse IPv4^(?:[0-9a-f]{1,4}:){7}[0-9a-f]{1,4}$une adresse IPv6 écrite en entier^(?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}$une adresse MAC^(?:6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]?\d{1,4})$un numéro de port^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$un UUID^#(?:[0-9a-f]{3}|[0-9a-f]{6})$un code couleur hexadécimal^rgb\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*\)$une couleur au format rgb()^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$une date au format ISO^(?:0[1-9]|[12]\d|3[01])/(?:0[1-9]|1[0-2])/\d{4}$une date écrite avec des barres^(?:[01]\d|2[0-3]):[0-5]\d$une heure au format 24 heures^(?:0?[1-9]|1[0-2]):[0-5]\d\s?(?:am|pm)$une heure avec am ou pm^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$un horodatage ISO complet^P(?=\d|T\d)(?:\d+Y)?(?:\d+M)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+S)?)?$une durée ISO^\d+\.\d+\.\d+(?:-[0-9a-z.-]+)?(?:\+[0-9a-z.-]+)?$un numéro de version sémantique^\d+$un entier sans signe^[+-]?\d+$un entier pouvant porter un signe^-?\d+(?:\.\d+)?$un nombre pouvant avoir des décimales^-?\d+(?:\.\d+)?[eE][+-]?\d+$un nombre en notation scientifique^(?:100(?:\.0+)?|\d{1,2}(?:\.\d+)?)%$un pourcentage de 0 à 100^\d{1,3}(?:,\d{3})*$un nombre séparé par des virgules^[$€£¥₩]\s?\d{1,3}(?:,\d{3})*(?:\.\d{2})?$un montant avec symbole monétaire^[0-9a-f]+$une chaîne hexadécimale^[01]+$une chaîne faite de 0 et 1^[0-7]+$une chaîne octale^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$une chaîne encodée en base64^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]*$un JWT découpé par deux points^\+[1-9]\d{7,14}$un numéro de téléphone au format international^[a-z][a-z0-9_]{2,15}$un identifiant commençant par une lettre^[a-z0-9]+(?:-[a-z0-9]+)*$un slug d’URL^[^\\/:*?"<>|]+\.[a-z0-9]+$un nom de fichier avec extension^.+\.(?:jpe?g|png|gif|webp|avif|svg)$une extension de fichier image^/(?:[^/\0]+/)*[^/\0]*$un chemin de style Unix^[A-Za-z]:\\(?:[^\\/:*?"<>|]+\\)*[^\\/:*?"<>|]*$un chemin Windows^</?[a-z][a-z0-9]*(?:\s[^<>]*)?/?>$une balise HTML^\.-?[_a-z][_a-z0-9-]*$un sélecteur de classe CSS^M{0,3}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3})$un chiffre romain^-?(?:90(?:\.0+)?|[1-8]?\d(?:\.\d+)?)$une latitude^-?(?:180(?:\.0+)?|1[0-7]\d(?:\.\d+)?|\d{1,2}(?:\.\d+)?)$une longitude^(?:0|[1-9]\d*)$un nombre sans zéro initial^\d*[02468]$un nombre pair^\s*$une ligne vide

Trouver et nettoyer36

Pour extraire ou supprimer uniquement la partie voulue dans un texte plus large.

\s+$espace resté en fin de ligne^\s+espace en début de ligne^\s+|\s+$espace aux deux bouts\s{2,}deux espaces ou plus à la suite\n\s*\nune ligne vide entre deux lignes\D+tout ce qui n’est pas un chiffre[^\x00-\x7F]un caractère hors ASCII[\x00-\x1F]un caractère de contrôle invisible</?[^>]+>les balises HTML d’un texte<!--[\s\S]*?-->un commentaire HTML//.*$un commentaire commençant par deux barres/\*[\s\S]*?\*/un commentaire sur plusieurs lignes"[^"\\]*(?:\\.[^"\\]*)*"texte entre guillemets doubles'[^'\\]*(?:\\.[^'\\]*)*'texte entre guillemets simples\[([^\]]+)\]\(([^)]+)\)un lien Markdown^#{1,6}\s+.+$une ligne de titre Markdown(?:^|\s)#([a-z0-9_]+)un mot-dièse(?:^|\s)@([a-z0-9_]{2,})une mention avec arobase[?&]([^=&]+)=([^&]*)un paramètre de requête d'une URLhttps?://[^\s<>"]+une URL au milieu du texte^https?://([^/:?#]+)seulement le domaine d'une URL\.([a-z0-9]+)$l'extension d'un nom de fichier(?<=[a-z0-9])(?=[A-Z])la jointure entre mots en camelCase_([a-z])la lettre après un tiret bas-([a-z])la lettre après un trait d’union(?:^|,)("(?:[^"]|"")*"|[^,]+)un champ séparé par une virgule^([^=]+)=(.*)$un nom et une valeur séparés par un signe égal^\s*(\S+)le premier mot(\S+)\s*$le dernier mot\d+les suites de chiffres dans un texte\b\w+\bchaque mot, un par un\[([^\]]*)\]ce qui est entre crochets\(([^)]*)\)ce qui est entre parenthèses[\uD800-\uDBFF][\uDC00-\uDFFF]un emoji occupant deux unités(.)\1{2,}le même caractère trois fois ou plus,\s*([}\]])une virgule avant la fermeture

Comment lire

  • Avec ^ et $, la chaîne entière doit correspondre ; sans eux, le motif peut se trouver n’importe où. Ancrez toujours ce qui sert à valider.
  • Les parenthèses ( ) capturent ce qu’elles entourent. Pour seulement grouper, écrivez (?: ) afin que la numérotation ne se décale pas.
  • Chaque expression ici est confrontée à ses exemples. Cela dit, « ressemble à un e-mail » et « est une vraie boîte » sont deux choses.
  • Les répétitions ouvertes imbriquées comme (a+)+ peuvent exploser sur certaines entrées. Repérez cette forme avant de coller l’expression d’autrui.

Questions fréquentes

Q. Qu’est-ce qu’une expression régulière ?

Un petit langage pour décrire la forme recherchée dans un texte. Écrire \d{4} plutôt que « quatre chiffres » permet au programme de trouver chaque endroit correspondant. JavaScript, Python, Java et la plupart des langages partagent presque la même notation.

Q. Pourquoi le contrôle d’e-mail est-il si court ?

Un motif couvrant toute la spécification fait des milliers de caractères et ne dit toujours pas si la boîte existe. Attraper les fautes de frappe, voilà ce que peut une expression régulière ; la seule vraie vérification est un message de confirmation.

Q. Pourquoi les motifs changent-ils selon le langage ?

Le noyau est commun, les détails non. JavaScript n’a pas \A, et Python demande d’activer re.MULTILINE. Tout ici est écrit pour fonctionner tel quel en JavaScript.

Q. Que veut dire qu’un motif peut être lent ?

Quand des répétitions ouvertes s’imbriquent, comme (a+)+, le nombre de retours en arrière explose sur une entrée qui ne correspond pas. Une chaîne courte peut alors prendre des secondes, ce qui est dangereux sur un serveur.

Q. Puis-je faire confiance à ces motifs ?

Chacun est stocké avec des exemples qui doivent correspondre et d’autres non, et les tests exécutent réellement les 133. Les exemples affichés sont ceux des tests : la description ne peut pas s’éloigner du motif.