Regular Expressions
Classes de caractères
Recherche…
Remarques
Classes simples
Regex | Allumettes |
---|---|
[abc] | N'importe lequel des caractères suivants: a , b ou c |
[az] | Tout caractère compris entre a et z , inclus (on appelle cela une plage ) |
[0-9] | N'importe quel chiffre de 0 à 9 inclus |
Cours communs
Certains groupes / plages de caractères sont si souvent utilisés, ils ont des abréviations spéciales:
Regex | Allumettes |
---|---|
\w | Caractères alphanumériques plus le trait de soulignement (également appelé "caractères de mots") |
\W | Caractères non verbaux (identiques à [^\w] ) |
\d | Chiffres ( plus larges que [0-9] puisque les chiffres persans, indiens, etc.) |
\D | Non-chiffres ( plus courts que [^0-9] depuis le rejet des chiffres persans, indiens, etc.) |
\s | Caractères d'espacement (espaces, tabulations, etc.) Remarque : peut varier en fonction de votre moteur / contexte |
\S | Caractères non blancs |
Classes négatives
Un caret (^) après le carré ouvrant fonctionne comme une négation des caractères qui le suivent. Cela correspond à tous les caractères qui ne sont pas dans la classe de caractères.
Les classes de caractères négatives correspondent également aux caractères de saut de ligne. Par conséquent, si elles ne doivent pas être comparées, les caractères de saut de ligne spécifiques doivent être ajoutés à la classe (\ r et / ou \ n).
Regex | Allumettes |
---|---|
[^AB] | Tout caractère autre que A et B |
[^\d] | N'importe quel caractère, sauf les chiffres |
Les bases
Supposons que nous ayons une liste d'équipes nommées comme ceci: Team A
, Team B
,…, Team Z
Alors:
-
Team [AB]
: Cela correspondra à l’Team A
ou à l’Team B
-
Team [^AB]
: Cela correspond à n'importe quelle équipe à l' exception de l'Team A
ou de l'Team B
Nous avons souvent besoin de faire correspondre des caractères qui "appartiennent" ensemble dans un contexte ou un autre (comme des lettres de A
à Z
), et c'est à cela que servent les classes de caractères.
Match différent, mots similaires
Considérons la classe de caractère [aeiou]
. Cette classe de caractères peut être utilisée dans une expression régulière pour correspondre à un ensemble de mots épelés de la même manière.
b[aeiou]t
correspond à:
- chauve souris
- pari
- bit
- bot
- mais
Il ne correspond pas:
- combat
- btt
- bt
Les classes de personnage correspondent à un et un seul personnage à la fois.
Correspondance non alphanumérique (classe de caractères nuls)
[^0-9a-zA-Z]
Cela correspondra à tous les caractères qui ne sont ni des chiffres ni des lettres (caractères alphanumériques). Si le caractère de soulignement _
est également à nier, l'expression peut être raccourcie à:
[^\w]
Ou:
\W
Dans les phrases suivantes:
Salut, ça va?
J'ai hâte pour 2017 !!!
Les caractères suivants correspondent à:
,
,,
'
,?
et le caractère de fin de ligne.
'
,,
!
et le caractère de fin de ligne.
UNICODE NOTE
Notez que certaines variantes prenant en charge les propriétés de caractères Unicode peuvent interpréter \w
et \W
comme [\p{L}\p{N}_]
et [^\p{L}\p{N}_]
ce qui signifie d'autres lettres Unicode et les caractères numériques seront également inclus (voir documents PCRE ). Voici un test PCRE \w
:
Dans .NET, \w
= [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Lm}\p{Mn}\p{Nd}\p{Pc}]
, et notez qu'il ne correspond pas à \p{Nl}
et à \p{No}
contrairement à PCRE (voir la documentation de \w
.NET ):
Notez que pour une raison quelconque, les lettres minuscules Unicode 3.1 (comme 𝐚𝒇𝓌𝔨𝕨𝗐𝛌𝛚
) ne correspondent pas.
Java (?U)\w
correspondra à un mélange de ce que \w
correspond dans PCRE et .NET:
Correspondance sans chiffres (classe de caractères négative)
[^0-9]
Cela correspondra à tous les caractères qui ne sont pas des chiffres ASCII.
Si les chiffres Unicode doivent également être annulés, l'expression suivante peut être utilisée, en fonction de vos paramètres de saveur / langue:
[^\d]
Cela peut être raccourci à:
\D
Vous devrez peut-être activer explicitement la prise en charge des propriétés de caractère Unicode en utilisant le modificateur u
ou par programmation dans certaines langues, mais cela peut ne pas être évident. Pour transmettre explicitement l'intention, la construction suivante peut être utilisée (lorsque le support est disponible):
\P{N}
Ce qui signifie par définition : tout caractère qui n'est pas un caractère numérique dans un script. Dans une plage de caractères négative, vous pouvez utiliser:
[^\p{N}]
Dans les phrases suivantes:
Salut, ça va?
J'ai hâte pour 2017 !!!
Les caractères suivants seront appariés:
,
,,
'
,?
, le caractère de fin de ligne et toutes les lettres (minuscules et majuscules).
'
,,
!
, le caractère de fin de ligne et toutes les lettres (minuscules et majuscules).
Classe de personnage et problèmes communs rencontrés par les débutants
1. Classe de caractère
La classe de caractères est désignée par []
. Le contenu d'une classe de caractères est traité single character separately
. par exemple, supposons que nous utilisions
[12345]
Dans l'exemple ci-dessus, cela signifie correspondre à 1 or 2 or 3 or 4 or 5
. En termes simples, il peut être compris comme or condition for single characters
( accent sur un seul caractère )
1.1 Mot de prudence
- Dans la classe de caractères, il n'y a aucun concept de correspondance d'une chaîne. Donc, si vous utilisez regex
[cat]
, cela ne signifie pas qu'il devrait correspondre littéralement au motcat
mais cela devrait correspondre àc
oua
out
. Il s’agit d’un malentendu très courant chez les personnes les plus récentes. - Parfois, les gens utilisent
|
(alternance) à l'intérieur de la classe de caractères en pensant qu'il agira comme uneOR condition
qui est incorrecte. par exemple en utilisant[a|b]
signifie en fait correspondre àa
ou|
(littéralement) oub
.
2. Gamme dans la classe de caractères
La plage de la classe de caractères est indiquée par un signe -
. Supposons que nous voulons trouver un caractère dans les alphabets anglais de A
à Z
Cela peut être fait en utilisant la classe de caractères suivante
[A-Z]
Cela pourrait être fait pour toute plage ASCII ou unicode valide. Les gammes les plus couramment utilisées comprennent [AZ]
, [az]
ou [0-9]
. En outre, ces plages peuvent être combinées en classe de caractères
[A-Za-z0-9]
Cela signifie que tous les caractères compris entre A to Z
ou a to z
ou 0 to 9
. La commande peut être n'importe quoi. Donc, ce qui précède est équivalent à [a-zA-Z0-9]
tant que la plage que vous définissez est correcte.
2.1 Mot de prudence
Parfois, lorsque vous écrivez des plages pour
A
àZ
gens l'écrivent comme[Az]
. C'est faux dans la plupart des cas car nous utilisonsz
au lieu deZ
Donc, cela correspond à n'importe quel caractère de la plage ASCII65
(de A) à122
(de z), qui inclut de nombreux caractères non intentionnels après la plage ASCII90
(de Z). Cependant ,[Az]
peut être utilisé pour faire correspondre toutes les lettres[a-zA-Z]
dans une expression régulière de type POSIX lorsque le classement est défini pour une langue particulière.[[ "ABCEDEF[]_abcdef" =~ ([Az]+) ]] && echo "${BASH_REMATCH[1]}"
sur Cygwin avecLC_COLLATE="en_US.UTF-8"
produitABCEDF
. Si vous définissezLC_COLLATE
surC
(sur Cygwin, fait avecexport
), cela donnera leABCEDEF[]_abcdef
attendu.Signification de
-
classe de caractères à l'intérieur est spécial. Il désigne la plage comme expliqué ci-dessus. Que faire si nous voulons correspondre-
caractère littéralement? Nous ne pouvons pas le mettre ailleurs, sinon il indiquera des plages s'il est placé entre deux caractères. Dans ce cas , nous devons mettre-
en début de classe de caractères comme[-AZ]
ou en fin de classe de caractères comme[AZ-]
ouescape it
si vous voulez l' utiliser au milieu comme[AZ\-az]
.
3. Classe de caractère nié
La classe de caractère négatif est désignée par [^..]
. Le signe caret ^
correspond à n'importe quel caractère à l'exception de celui présent dans la classe de caractères. par exemple
[^cat]
signifie que n'importe quel caractère, sauf c
ou a
ou t
.
3.1 Mot de prudence
- Le sens du signe caret
^
correspond à la négation que s'il se trouve au début de la classe de caractères. S'il est ailleurs dans la classe de caractères, il est traité comme un caractère littéral sans signification particulière. - Certaines personnes écrivent des regex comme
[^]
. Dans la plupart des moteurs de regex, cela génère une erreur. La raison en est lorsque vous utilisez^
dans la position de départ, il attend au moins un caractère qui devrait être annulé. En JavaScript cependant, il s'agit d'une construction valide correspondant à tout sauf à rien , c.-à-d. Qu'elle correspond à n'importe quel symbole possible (sauf les signes diacritiques, au moins dans ES5).
Classes de caractères POSIX
Les classes de caractère POSIX sont des séquences prédéfinies pour un certain ensemble de caractères.
Classe de personnage | La description |
---|---|
[:alpha:] | Caractères alphabétiques |
[:alnum:] | Caractères alphabétiques et chiffres |
[:digit:] | Chiffres |
[:xdigit:] | Chiffres hexadécimaux |
[:blank:] | Espace et onglet |
[:cntrl:] | Caractères de contrôle |
[:graph:] | Caractères visibles (tout sauf les espaces et les caractères de contrôle) |
[:print:] | Caractères et espaces visibles |
[:lower:] | Minuscules |
[:upper:] | Lettres capitales |
[:punct:] | Ponctuation et symboles |
[:space:] | Tous les caractères d'espacement, y compris les sauts de ligne |
Des classes de caractères supplémentaires peuvent être disponibles en fonction de l'implémentation et / ou des paramètres régionaux.
Classe de personnage | La description |
---|---|
[:<:] | Début de mot |
[:>:] | Fin de mot |
[:ascii:] | Caractères ASCII |
[:word:] | Lettres, chiffres et soulignement. Équivalent à \w |
Pour utiliser l'intérieur d'une séquence de parenthèses (alias classe de caractères), vous devriez également inclure les crochets. Exemple:
[[:alpha:]]
Cela correspondra à un caractère alphabétique.
[[:digit:]-]{2}
Cela correspondra à 2 caractères, soit des chiffres, soit -
. Ce qui suit correspondra à:
-
--
-
11
-
-2
-
3-
Plus d'informations sont disponibles sur: Regular-expressions.info