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.
Notation36
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 compris^\p{L}+$lettres de n'importe quelle écriture^\p{Extended_Pictographic}+$uniquement des pictogrammes^[\u0400-\u04FF]+$lettres cyrilliques seulement^\x41$un caractère écrit en hexadécimal^[ㄱ-ㅎㅏ-ㅣ]+$uniquement des jamo hangeul^[-]+$uniquement l'écriture thaïe^[-ۿ]+$uniquement l'écriture arabe^[0-9]+$uniquement des chiffres pleine chasseRépétitions et groupes24
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 parties^\d{0,3}$trois chiffres au maximum^\w{3,8}$entre trois et huit caractères de mot^(?:\w+\.){2}\w+$trois parties séparées par des points^/[a-z]+/?$un chemin dont la barre oblique finale est facultative^(cat|dog)$exactement un des deux mots^(ab){3}$un groupe répété exactement trois fois^[a-c]{2,4}$de deux à quatre caractères d'un ensembleRegarder autour14
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 milliers^(?!.*(.)\1).+$aucun caractère répété à la suite(?<=₩)\d+les chiffres qui suivent le signe du won^(?!.*\btest\b).*$une ligne qui ne contient pas un mot donné^(?!test)\w+$ce qui ne commence pas par un mot donné^.*(?<=\.png)$ce qui se termine par un suffixe donné^(?!.*\d\d).*$un texte sans deux chiffres de suiteContrôle de la chaîne entière66
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^\d{4}-W(?:0[1-9]|[1-4]\d|5[0-3])$un numéro de semaine ISO, jusqu'à 53^#(?:[0-9a-f]{4}|[0-9a-f]{8})$une couleur hexadécimale avec canal alpha^\d{4}(?:[ -]?\d{4}){3}$un numéro de carte en quatre blocs de quatre^[A-Z]{3}$un code de devise à trois lettres^0x[0-9a-f]+$un nombre hexadécimal avec le préfixe 0x^[0-9a-f]{64}$une empreinte de soixante-quatre caractères^[0-9a-f]{24}$un identifiant de document de vingt-quatre caractères^\d{5}$un code postal à cinq chiffres^[A-Z]{2}$un code pays à deux lettres^(\d{1,3}\.){3}\d{1,3}/\d{1,2}$une adresse IPv4 avec préfixe CIDR^01[016789]-?\d{3,4}-?\d{4}$un numéro de mobile coréen^[가-힣]{2,5}$un nom en hangeul de deux à cinq syllabes^\d{5}(-\d{4})?$un code postal américain^([0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4})*)?::([0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4})*)?$une adresse IPv6 abrégée^\d{3}-\d{2}-\d{5}$un numéro d’entreprise coréen^[a-z]+\/[a-zA-Z0-9][a-zA-Z0-9.+-]*$un type MIME^data:[a-z]+\/[a-z0-9.+-]+;base64,[A-Za-z0-9+/]+=*$une URI data: en base64^(\S+\s+){4}\S+$une expression cron à cinq champs^[A-Za-z]:\\.*$un chemin de lecteur Windows^[\^~]?\d+\.\d+\.\d+$une plage semver avec ^ ou ~^(10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3})$une plage IPv4 privée^[A-Z][a-zA-Z0-9]*$un nom en PascalCaseTrouver et nettoyer49
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\*\*([^*]+)\*\*du texte en gras entre deux astérisques`([^`]+)`du code entre accents graves(\w+)="([^"]*)"un attribut dont la valeur est entre guillemets\x1b\[[0-9;]*mun code d'échappement de couleur du terminalfrom ['\"]([^'\"]+)['\"]le chemin d'un import#[0-9a-fA-F]{6}\bune couleur hexadécimale dans le texteTODO:?\s*(.*)une note TODO dans un commentaire\d+(px|em|rem|%)un nombre avec une unité CSS!\[([^\]]*)\]\(([^)]+)\)une image Markdown^[-*+]\s+(.+)$un élément de liste Markdown--[^\n]*un commentaire SQL sur une ligne\$\{?([A-Z_][A-Z0-9_]*)\}?une variable d’environnement shell[A-Za-z0-9_-]{11}un identifiant de vidéo YouTubeComment 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
QQu’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.
QPourquoi 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.
QPourquoi 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.
QQue 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.
QPuis-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.