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à.
\dun chiffre\Dtout sauf un chiffre\wlettre, chiffre ou tiret bas\Wtout sauf un caractère de mot\sun caractère blanc\Stout sauf un blanc^.$n'importe quel caractère^[a-z]+$minuscules seulement^[A-Z]+$majuscules seulement^[A-Za-z0-9]+$lettres et chiffres seulement^[^0-9]+$texte sans aucun chiffre^[가-힣]+$hangeul seulement^[ぁ-んァ-ヶー]+$kana seulement^[\u4e00-\u9fff]+$sinogrammes seulement^a\.b$un point littéral^a/b$une barre oblique littérale\tune tabulation\nun saut de ligne\r\nune fin de ligne Windows^\u00e9$un caractère écrit par point de code^Hellotexte qui commence par ce motworld$texte qui finit par ce mot^cat$exactement ce mot et rien de plus\bcat\ble mot isolé, pas à l’intérieur d’un autre\Bcatle mot seulement à l’intérieur d’un autre^cat$une correspondance insensible à la casse^ble début de chaque ligne, pas seulement du texte^a.b$n'importe quel caractère, sauts de ligne comprisRépétitions et groupes17
Combien de fois quelque chose se répète, et ce qui compte pour une unité.
^ab*c$zéro fois ou plus^ab+c$une fois ou plus^colou?r$une lettre facultative^\d{4}$exactement quatre chiffres^\d{2,4}$de deux à quatre chiffres^\d{2,}$deux chiffres ou plus<.+?>une balise, la plus courte possible^<.+>$un bloc, le plus long possible^(?:cat|dog)$l'un ou l'autre des deux mots^(?:ab)+$un groupe de deux lettres, répété^(\d{3})-(\d{4})$deux parties capturées séparément^(?:\d{3}-)+\d{4}$grouper sans capturer^(?<year>\d{4})-(?<month>\d{2})$capturer avec un nom(\w)\1le même caractère deux fois de suite\b(\w+)\s+\1\ble même mot tapé deux fois^(?:https?://)?example\.com$une adresse avec ou sans le schéma^(?:\d{1,3}\.){3}\d{1,3}$une adresse en quatre partiesRegarder autour8
Vérifie ce qui précède ou suit sans le consommer. Pratique pour empiler des conditions.
\d+(?= dollars)un nombre suivi d'un mot donné^(?!admin$).+$tout sauf ce mot précis(?<=\$)\d+un nombre précédé d'un signe donné(?<!\$)\b\d+un nombre sans ce signe devant^(?=.*[A-Z])(?=.*\d)(?=.*[a-z]).{8,}$huit caractères ou plus avec majuscule, minuscule et chiffre^(?!.* ).+$texte sans double espace^(?=.*@).+$texte contenant obligatoirement ce signe\B(?=(\d{3})+(?!\d))l'endroit où placer le séparateur de milliersContrô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 videTrouver 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 fermetureComment 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.