Référence – Que signifie cette regex?

Qu’est-ce que c’est?

Ceci est une collection de questions et réponses communes. C’est aussi un wiki de communauté, donc tout le monde est invité à participer à sa maintenance.

Pourquoi est-ce?

regex souffre de give me ze code des questions de type give me ze code et de mauvaises réponses sans explication. Cette référence est destinée à fournir des liens vers des Q & A de qualité.

Quelle est la scope?

Cette référence est destinée aux langages suivants: php , perl , javascript , python , ruby , java , .net .

Cela peut être trop large, mais ces langages partagent la même syntaxe. Pour les fonctionnalités spécifiques, il y a l’étiquette de la langue derrière, par exemple:

  • Que sont les groupes d’équilibrage des expressions régulières? .net

FAQ sur les expressions régulières de débordement de stack


Tutoriels en ligne

  • RegexOne
  • Informations sur les expressions régulières

Quantificateurs

  • Zéro ou plus: * : gourmand , *? : réticent , *+ : possessif
  • Un ou plus: + : gourmand , +? : réticent , ++ : possessif
  • ? : facultatif (zéro ou un)
  • Fourchettes min / max (tout compris): {n,m} : entre n & m , {n,} : n-ou-plus , {n} : exactement n
  • Différences entre le quantificateur gourmand, réticent (aka “paresseux”, “non structuré”) et possessif:
    • Quantificateurs Greedy vs Reluctant vs. Possessive
    • Discussion approfondie sur les différences entre gourmand et non gourmand
    • Quelle est la différence entre {n} et {n}?
    • Est-ce que quelqu’un peut m’expliquer les Quantitateurs Possessifs? php , perl , java , ruby
    • Emulation de quantificateurs possessifs .net
    • Références de débordement hors stack: à partir d’ Oracle , regular-expressions.info

Classes de personnages

  • Quelle est la différence entre crochets et parenthèses?
  • [...] : n’importe quel caractère, [^...] : nié / n’importe quel caractère mais
  • [^] correspond à n’importe quel caractère, y compris les nouvelles lignes javascript
  • [\w-[\d]] / [az-[qz]] : définit la soustraction .net , le schéma xml , xpath , JGSoft
  • [\w&&[^\d]] : définir l’intersection java , ruby 1.9+
  • [[:alpha:]] : classes de caractères POSIX
  • Pourquoi [^\\D2] , [^[^0-9]2] , [^2[^0-9]] obtiennent-ils des résultats différents en Java? Java
  • Sténographie:
    • Chiffre: \d : chiffre , \D : non-chiffre
    • Caractère de mot (lettre, chiffre, trait de soulignement): \w : caractère de mot , \W : caractère de non-mot
    • Espaces blancs : \s : espaces blancs , \S : espaces non blancs
  • Catégories Unicode ( \p{L}, \P{L} , etc.)

Séquences d’échappement

  • Espaces horizontaux: \h : espace-ou-onglet , \t : onglet
  • Newlines:
    • \r , \n : retour chariot et saut de ligne
    • \R : générique newline php
  • Séquences d’espace négatif: \H : Caractère d’espacement non horizontal, \V : Caractère d’ espacement non vertical, \N : Caractère d’avance de ligne pcre php5 java-8
  • Autre: \v : tabulation verticale , \e : le caractère d’échappement

Ancres

  • ^ : début de ligne / entrée , \b : limite de mot et \B : limite de non-mot , $ : fin de ligne / entrée
  • \A : début de l’entrée, \Z : fin de l’entrée php , perl , ruby
  • \z : la fin de l’entrée ( \Z en Python) .net , php , pcre , java , ruby , icu , swift , objective-c
  • \G : début de la correspondance php , perl , ruby

(Voir aussi “Informations spécifiques aux saveurs → Java → Fonctions dans Matcher “)

Groupes

  • (...) : groupe de capture , (?:) : groupe de non-capture
    • Pourquoi mon groupe de capture répétitif ne capture-t-il que la dernière partie?
  • \1 : référence arrière et référence du groupe de capture, $1 : référence du groupe de capture
    • Quelle est la signification d’un nombre après une barre oblique inverse dans une expression régulière?
    • \g<1>123 : Comment suivre un groupe de capture numéroté, tel que \1 , avec un nombre?: python
  • Que signifie un sous-modèle (?i:regex) ?
  • Que signifie le “P” dans (?Pregexp) ?
  • (?>) : groupe atomique ou groupe indépendant , (?|) : réinitialisation de twig
    • Équivalent de la réinitialisation de la twig dans .NET / C # .net
  • Groupes de capture nommés:
    • Général nommé référence du groupe de capture à regular-expressions.info
    • java : (?regex) : vue d’ensemble et règles de nommage (liens de débordement de la stack)
    • Autres langages: (?Pregex) python , (?regex) .net , (?regex) perl , (?Pregex) et (?regex) php

Lookarounds

  • Lookaheads: (?=...) : positif , (?!...) : négatif
  • Lookbehinds: (?<=...) : positif , (? : négatif (non supporté par javascript )
  • Regarder derrière les limites dans:
    • Lookbehinds doivent être de longueur constante php , perl , python , ruby
    • Sondes de longueur limitée {0,n} java
    • Les longueurs variables sont autorisées .net
  • Lookbehind alternatives:
    • En utilisant \K php , perl ( Saveurs supportant \K )
    • Module regex alternatif pour Python python
      • La voie du piratage
      • JavaScript équivalents négatifs à regarder

Modificateurs

  • La plupart des variantes: g : global , i : insensible à la casse , u : unicode , x : espace blanc étendu
  • c : position actuelle perl e : expression php perl o : une fois le rbuy
  • m : python phl perl multiligne javascript .net java , m : ruby (non) multiligne
  • s : ligne unique (non supporté par javascript ou ruby ), javascript de contournement
  • S : étudier php U : ungreedy php r
  • Comment convertir un fichier preg_replace e en preg_replace_callback?
  • Que sont les modificateurs en ligne?
  • Qu'est-ce que '? -Mix' dans une expression régulière Ruby

Autre:

  • | : opérateur d'alternance (OR),. : tout caractère , [.] : caractère littéral
  • Quels caractères spéciaux doivent être échappés?
  • Verbes de contrôle ( php et perl ): (*PRUNE) , (*SKIP) , (*FAIL) et (*F)
    • php seulement: (*BSR_ANYCRLF)
  • Récursivité ( php et perl ): (?R) , (?0) et (?1) , (?-1) , (?&groupname)

Tâches communes

  • Récupère une chaîne entre deux accolades: {...}
  • Faire correspondre (ou remplacer) un motif sauf dans les situations s1, s2, s3 ...
  • Comment trouver tous les identifiants de vidéos YouTube dans une chaîne utilisant une expression régulière?
  • Validation:
    • Internet: adresses e - mail , URL (alternatives hôte / port: regex et non regex ), mots de passe
    • Numérique: un nombre , plages min-max (telles que 1-31) , numéros de téléphone , date
    • Analyse HTML avec regex: voir "Informations générales> Quand ne pas utiliser Regex"

Regex-Fu avancé

  • Cordes et chiffres:
    • Expression régulière correspondant à une ligne ne contenant pas de mot?
    • Comment ce modèle PCRE détecte-t-il les palindromes?
    • Match cordes dont la longueur est un quasortingème pouvoir
    • Comment cette regex trouve-t-elle des nombres sortingangulars?
    • Comment déterminer si un nombre est un nombre premier avec regex?
    • Comment faire correspondre le caractère central d'une chaîne avec une expression régulière?
  • Autre:
    • Comment pouvons-nous faire correspondre un ^ nb ^ n avec une regex Java?
    • Faire correspondre les crochets nesteds
      • En utilisant un pattern récursif php , perl
      • Utilisation de groupes d'équilibrage .net
    • Regex "vertical" correspondant à une "image" ASCII
    • Liste des questions de regex hautement votées sur Code Golf
    • Comment faire que deux quantificateurs se répètent le même nombre de fois?
    • Une expression régulière impossible à faire correspondre: (?!a)a
    • Match / delete / replace this sauf dans les contextes A, B et C
    • Faire correspondre les crochets nesteds avec regex sans utiliser de groupes de récursion ou d'équilibrage?

Informations spécifiques aux arômes

(Sauf pour ceux marqués avec * , cette section contient des liens non-Stack Overflow.)

  • Java
    • Documentation officielle: Pattern Javadoc , tutoriel sur les expressions régulières d'Oracle
    • Les différences entre les fonctions dans java.util.regex.Matcher :
      • matches() ): la correspondance doit être ancrée à la fois au début et à la fin de l'entrée
      • find() ): une correspondance peut se trouver n'importe où dans la chaîne d'entrée (sous-chaînes)
      • lookingAt() : la correspondance doit être ancrée pour le démarrage en entrée uniquement
      • (Pour les ancres en général, voir la section "Ancres")
    • Les seules fonctions java.lang.Ssortingng qui acceptent les expressions régulières: matches(s) , replaceAll(s,s) , replaceFirst(s,s) , split(s) , split(s,i)
    • * Une discussion détaillée sur les inconvénients et les fonctionnalités manquantes de java.util.regex
  • .NET
    • Comment lire une expression .NET avec anticipation, recherche, capture de groupes et références inversées mélangées?
  • Documentation officielle:
    • Boost regex engine: syntaxe générale, syntaxe Perl (utilisé par TextPad, Sublime Text, UltraEdit, ... ???)
    • Informations générales sur JavaScript 1.5 et object RegExp
    • .NET MySQL Oracle Perl5 version 18.2
    • PHP: syntaxe de modèle , preg_match
    • Python: Opérations d'expression régulière , search et match , comment faire
    • Splunk: terminologie regex et syntaxe et commande regex
    • Tcl: syntaxe regex , page de manuel , commande regexp
    • Visual Studio Rechercher et remplacer

informations générales

(Les liens marqués d'un * sont des liens non-débordement de stack.)

  • Autres ressources de documentation générale: apprentissage des expressions régulières , * Regular-expressions.info , * entrée Wikipedia , * RexEgg , projet Open-Directory
  • DFA contre NFA
  • Génération de chaînes correspondant à l'expression régulière
  • Books: Les expressions régulières de Jeffrey Friedl
  • Quand ne pas utiliser les expressions régulières:
    • Certaines personnes, confrontées à un problème, pensent "Je sais, je vais utiliser des expressions régulières". Maintenant, ils ont deux problèmes. (article de blog écrit par le fondateur de Stack Overflow ) *
    • N'utilisez pas regex pour parsingr HTML:
      • Ne pas S'il vous plaît, ne le faites pas
      • Eh bien, peut-être ... si vous êtes vraiment déterminé (les autres réponses à cette question sont également bonnes)

Exemples de regex pouvant entraîner l'échec du moteur regex

  • Pourquoi cette expression régulière tue-t-elle le moteur de regex Java?

Outils: Testeurs et Explicateurs

(Cette section contient des liens non-Stack Overflow.)

  • En ligne (* comprend un testeur de remplacement, + comprend un testeur de partage) :

    • Debuggex (A également un repository de regexes utiles) javascript , python , pcre
    • * Expressions régulières 101 php , pcre , python , javascript
    • Regex Pal , regular-expressions.info javascript
    • Rubis Rubis RegExr Regex Hero dotnet
    • * + regexstorm.net .net
    • * RegexPlanet: Java java , Go go , Haskell haskell , JavaScript javascript , .NET dotnet , Perl perl php PCRE php , python python , Ruby ruby , XRegExp xregexp
    • freeformatter.com xregexp
    • * + regex.larsolavtorvik.com php PCRE et POSIX, javascript
    • Refiddle javascript ruby .net
  • Hors ligne:

    • Microsoft Windows: RegexBuddy (parsing), RegexMagic (création), Expresso (parsing, création, gratuit)