Référence - Que signifie cette expression régulière?
Qu'est-ce que c'est?
Ceci est une collection de questions / réponses courantes. C'est aussi un wiki communautaire, donc tout le monde est invité à participer à sa maintenance.
Pourquoi est-ce?
regex souffre de me donner des questions de type code ze et de mauvaises réponses sans explication. Cette référence est destinée à fournir des liens vers des questions-réponses de qualité.
Quelle est la portée?
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, exemple:
- Que sont les groupes d'équilibrage des expressions régulières? .net
Réponses
FAQ sur les expressions régulières Stack Overflow
Voir également de nombreux conseils généraux et liens utiles sur la page de détails des balises regex .
Tutoriels en ligne
Quantificateurs
- Zero-ou plus:
*
: avide ,*?
: réticente ,*+
: possessif - Un ou plus:
+
: avide ,+?
: réticente ,++
: possessif ?
: facultatif (zéro ou un)- Min / Max (plages de tous inclus):
{n,m}
: entre n et m ,{n,}
n-ou-plus ,{n}
: exactement n - Différences entre le quantificateur gourmand, réticent (alias "paresseux", "non gourmand") et possessif:
- Quantificateurs cupides vs réticents vs possessifs
- Discussion approfondie sur les différences entre gourmand et non gourmand
- Quelle est la différence entre
{n}
et{n}?
- Quelqu'un peut-il m'expliquer les quantificateurs possessifs? php , perl , java , ruby
- Émulation des quantificateurs possessifs .net
- Références Non-Stack Overflow: à partir d' Oracle , regular-expressions.info
Classes de personnages
- Quelle est la différence entre les crochets et les parenthèses?
[...]
: n'importe quel caractère[^...]
,: annulé / n'importe quel caractère mais[^]
correspond à n'importe quel caractère, y compris les sauts de ligne javascript[\w-[\d]]
/[a-z-[qz]]
: définir la soustraction .net , xml-schema , xpath , JGSoft[\w&&[^\d]]
: définir l'intersection java , ruby 1.9+[[:alpha:]]
: Classes de caractères POSIX- Pourquoi ne
[^\\D2]
,[^[^0-9]2]
,[^2[^0-9]]
obtenir des résultats différents en Java? Java - Sténographie:
- Chiffre:
\d
: chiffres ,\D
: non chiffres - Caractère mot (lettre, chiffre, underscore):
\w
: caractère de mot ,\W
: le caractère non-mot - Whitespace:
\s
: des espaces ,\S
: non-blancs
- Chiffre:
- Catégories Unicode (
\p{L}, \P{L}
, etc.)
Séquences d'échappement
- Espace horizontal:
\h
: espace ou onglet ,\t
: onglet - Nouvelles lignes:
- Séquences d'espaces niés:: Caractère d'espacement
\H
non horizontal\V
\N
,: Caractère d' espacement non vertical ,: Caractère sans saut de ligne pcre php5 java-8 - Autres:
\v
: onglet vertical ,\e
: le caractère d'échappement
Ancres
^
: début de la ligne / entrée ,\b
: limite de mot, et\B
: limite non-mot ,$
: fin de la ligne entrée /\A
: début de l'entrée\Z
,: fin de l'entrée php , perl , ruby\z
: la toute fin de l'entrée (\Z
en Python) .net , php , pcre , java , ruby , icu , swift , objective-c\G
: début du match php , perl , ruby
(Voir également "Informations spécifiques aux saveurs → Java → Les fonctions de Matcher
")
Groupes
(...)
: groupe de capture ,(?:)
: groupe non-capture\1
: référence arrière et référence de groupe de capture,: référence de$1
groupe de capture- Que signifie un sous-modèle
(?i:regex)
? - Que signifie le «P»
(?P<group_name>regexp)
? (?>)
: groupe atomique ou groupe indépendant ,(?|)
: branche remise à zéro- Groupes de capture nommés:
- Référence générale nommée du groupe de capture à
regular-expressions.info
- java :
(?<groupname>regex)
: Présentation et règles de nommage (liens non-dépassement de la pile) - Autres langues: python , .net , perl , et php
(?P<groupname>regex)
(?<groupname>regex)
(?<groupname>regex)
(?P<groupname>regex)
(?<groupname>regex)
- Référence générale nommée du groupe de capture à
Lookarounds
- Lookaheads:
(?=...)
: positif ,(?!...)
: négatif - Assertions arrières:
(?<=...)
: positif ,(?<!...)
: négatif (non supporté par javascript ) - Regardez derrière les limites dans:
- Regardez derrière les alternatives:
Modificateurs
- La plupart des saveurs:
g
: global ,i
: insensible à la casse ,u
: unicode ,x
: des espaces blancs étendu c
: position actuelle perle
: expression php perlo
: une fois rubym
: multiligne php perl python javascript .net java ,m
: (non) multiligne rubiss
: ligne unique (non prise en charge par javascript ou ruby ),s
solution de contournement javascriptS
: étude phpU
: php r ungreedy- Comment convertir 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 point littéral- Quels caractères spéciaux doivent être échappés?
- Verbes de contrôle ( php et perl ):
(*PRUNE)
,(*SKIP)
,(*FAIL)
et(*F)
- php uniquement:
(*BSR_ANYCRLF)
- php uniquement:
- Récursion ( php et perl ):
(?R)
,(?0)
et(?1)
,(?-1)
,(?&groupname)
Tâches communes
- Obtenez une chaîne entre deux accolades:
{...}
- Faire correspondre (ou remplacer) un motif sauf dans les situations s1, s2, s3 ...
- Comment trouver tous les identifiants vidéo YouTube dans une chaîne à l'aide d'une expression régulière?
- Validation:
- Internet: adresses e - mail , URL (hôte / port: alternatives regex et non-regex ), mots de passe
- Numérique: un nombre , des plages min-max (telles que 1 à 31) , des numéros de téléphone , une date
- Analyse HTML avec regex: voir "Informations générales> Quand ne pas utiliser Regex"
Regex-Fu avancé
- Chaînes et nombres:
- Expression régulière pour correspondre à une ligne qui ne contient pas de mot
- Comment ce modèle PCRE détecte-t-il les palindromes?
- Correspond aux chaînes dont la longueur est une quatrième puissance
- Comment cette regex trouve-t-elle des nombres triangulaires?
- Comment déterminer si un nombre est un nombre premier avec regex?
- Comment faire correspondre le caractère du milieu dans une chaîne avec regex?
- Autre:
- Comment pouvons-nous faire correspondre un ^ nb ^ n avec Java regex?
- Faire correspondre les crochets imbriqués
- Correspondance d'expression régulière «verticale» dans une «image» ASCII
- Liste des questions regex hautement votées sur Code Golf
- Comment faire répéter deux quantificateurs le même nombre de fois?
- Une expression régulière impossible à trouver:
(?!a)a
- Correspondance / suppression / remplacement
this
sauf dans les contextes A, B et C - Faire correspondre les crochets imbriqués avec l'expression régulière sans utiliser de récursivité ou de groupes d'équilibrage?
Informations spécifiques à la saveur
(À l'exception de ceux marqués d'un *
, 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 à input-start et -endfind()
): Une correspondance peut être n'importe où dans la chaîne d'entrée (sous-chaînes)lookingAt()
: La correspondance doit être ancrée uniquement au début d'entrée- (Pour les ancres en général, voir la section "Ancres")
- Les seules
java.lang.String
fonctions qui acceptent les expressions régulières:matches(s)
,replaceAll(s,s)
,replaceFirst(s,s)
,split(s)
,split(s,i)
- * Une discussion (avisée et) détaillée des inconvénients et des caractéristiques manquantes dans
java.util.regex
- .NET
- Documentation officielle:
- Boost moteur regex: La syntaxe générale , syntaxe Perl (utilisée par TextPad, Sublime Text, UltraEdit, ... ???)
- Informations générales JavaScript 1.5 et objet RegExp
- .NET
- PHP: syntaxe de modèle ,
preg_match
- Python: opérations d'expressions régulières ,
search
vsmatch
, comment faire - Splunk: terminologie et syntaxe regex et commande regex
- Tcl: syntaxe regex , page de manuel ,
regexp
commande - Rechercher et remplacer Visual Studio
informations générales
(Les liens marqués d'un *
sont des liens non-Stack Overflow.)
- Autres ressources de documentation générale: Apprentissage des expressions régulières , * Regular-expressions.info , * entrée Wikipedia , * RexEgg , Open-Directory Project
- DFA contre NFA
- Génération de chaînes correspondant à l'expression régulière
- Livres: Mastering Regular Expressions de Jeffrey Friedl
- Quand ne pas utiliser d'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 rédigé parle fondateurde Stack Overflow ) *
- N'utilisez pas de regex pour analyser le HTML:
- Ne fais pas ça .
- Eh bien, peut-être ... si vous êtes vraiment déterminé (les autres réponses à cette question sont également bonnes)
- Ne fais pas ça .
Exemples de regex qui peuvent provoquer l'échec du moteur de regex
Outils: testeurs et explicateurs
(Cette section contient des liens non-Stack Overflow.)
En ligne (* comprend un testeur de remplacement, + comprend un testeur divisé) :
- Debuggex (a également un référentiel de regex utiles) javascript , python , pcre
- * Expressions régulières 101 php , pcre , python , javascript
- Regex Pal , regular-expressions.info javascript
- Rubis rubis
- * + 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- * + php PCRE et POSIX, javascript
regex.larsolavtorvik.com
- Refiddle javascript ruby .net
Hors ligne:
- Microsoft Windows: RegexBuddy (analyse), RegexMagic (création), Expresso (analyse, création, gratuit)