Les classes de caractères



Jusqu'ici, vous avez pu faire des recherches assez simples, mais encore rien de vraiment extraordinaire. L'outil de recherche de Word fait bien tout cela, après tout.
Mais rassurez-vous, les regex sont bien plus riches (et complexes) que l'outil de recherche de Word, vous allez voir.

Grâce à ce qu'on appelle les classes de caractères, on peut faire varier énormément les possibilités de recherche.

Tout cela tourne autour des crochets. On place une classe de caractères entre crochets dans une regex.
Cela nous permet de tester beaucoup de possibilités de recherche à la fois, tout en étant très précis.


Des classes simples


Ne tournons pas en rond plus longtemps, et regardons attentivement cette regex :

#gr[io]s#


Entre crochets, c'est ce qu'on appelle une classe de caractères. Cela signifie qu'une des lettres à l'intérieur peut convenir.
Dans le cas présent, notre regex reconnaît deux mots : « gris » et « gros ». C'est un peu comme le OU qu'on a appris tout à l'heure, sauf que ça s'applique ici à une lettre et non pas à un mot.

D'ailleurs, si vous mettez plusieurs lettres comme ceci :

#gr[ioa]s#


Cela signifie « i » OU « o » OU « a ». Donc notre regex reconnaît les mots « gris », « gros » et « gras » !
Allez, on se fait quelques exemples :


Chaîne

Regex

Résultat

La nuit, tous les chats sont gris

#gr[aoi]s#

VRAI

Berk, c'est trop gras comme nourriture

#gr[aoi]s#

VRAI

Berk, c'est trop gras comme nourriture

#gr[aoi]s$#

FAUX

Je suis un vrai zéro

#[aeiouy]$#

VRAI

Je suis un vrai zéro

#^[aeiouy]#

FAUX


Je suppose que vous comprenez les deux premières regex. Mais je pense que vous auriez besoin d'explications sur les trois dernières.

  • Pour « Berk, c'est trop gras comme nourriture », j'ai utilisé cette fois la regex #gr[aoi]s$#. Si vous avez bien suivi ce que je vous ai dit tout à l'heure, ça veut dire que notre chaîne doit se terminer par « gris », « gras » ou « gros ». Or ici le mot est au milieu, donc on nous répond FAUX. Essayez de le mettre à la fin et vous verrez que ça marche.
  • Ensuite « Je suis un vrai zéro » avec la regex #[aeiouy]$#. Celle-ci signifie que notre regex doit se terminer par une voyelle (aeiouy). Ça tombe bien, la dernière lettre de la chaîne est la lettre « o », donc on nous répond VRAI.
  • Enfin, même chaîne mais avec la regex #^[aeiouy]#. Cette fois, la chaîne doit commencer par une voyelle (en minuscule, en plus). Or la chaîne commence par « J », donc la réponse est FAUX !


Ça va, je ne vous ai toujours pas perdus en route ?
Si à un moment vous sentez que vous avez décroché, n'hésitez pas à relire un peu ce qui se trouve au-dessus, ça ne vous fera pas de mal.


Les intervalles de classe


C'est à partir de ce moment-là que les classes devraient commencer à vous bluffer.

Grâce au symbole « - » (le tiret), on peut autoriser toute une plage de caractères.
Par exemple, tout à l'heure on a utilisé la classe [aeiouy]. O.K., ce n'est pas trop long.
Mais que dites-vous de la classe [abcdefghijklmnopqrstuvwxyz] ? Tout ça pour dire que vous voulez qu'il y ait une lettre ?

J'ai mieux ! ;-)
Vous avez le droit d'écrire : [a-z] ! Avouez que c'est plus court ! Et si vous voulez vous arrêter à la lettre « e », pas de problème non plus : [a-e].


En plus, ça fonctionne aussi avec les chiffres : [0-9]. Si vous voulez plutôt un chiffre entre 1 et 8, tapez :[1-8].

Encore mieux ! Vous pouvez écrire deux plages à la fois dans une classe : [a-z0-9]. Cela signifie « N'importe quelle lettre (minuscule) OU un chiffre ».

Bien entendu, vous pouvez aussi autoriser les majuscules sans passer par les options comme on l'a fait tout à l'heure. Ça donnerait : [a-zA-Z0-9]. C'est donc une façon plus courte d'écrire :

[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789].

Faisons quelques tests, voulez-vous ?


Chaîne

Regex

Résultat

Cette phrase contient une lettre

#[a-z]#

VRAI

cette phrase ne comporte ni majuscule ni chiffre

#[A-Z0-9]#

FAUX

Je vis au 21e siècle

#^[0-9]#

FAUX

<h1>Une balise de titre HTML</h1>

#<h[1-6]>#

VRAI


Le dernier exemple est particulièrement intéressant car on se dirige doucement vers la pratique. On y vérifie justement si la chaîne comporte une balise HTML de titre (<h1> ou <h2>, etc., jusqu'à <h6>).


Et pour dire que je n'en veux pas ?


Si vous ne voulez PAS des caractères que vous énumérez dans votre classe, vous devrez placer le symbole « ^ » au début de la classe.

Mais ?!
Je croyais que ce caractère servait à indiquer le début d'une chaîne ?

Oui, mais si vous le placez à l'intérieur d'une classe, il sert à dire que vous ne VOULEZ PAS de ce qui se trouve à l'intérieur de cette classe.

Ainsi, la regex suivante :

#[^0-9]#

… signifie que vous voulez que votre chaîne comporte au moins un caractère qui ne soit pas un chiffre.

Maintenant, je fais chauffer vos cervelles (tableau suivant).


Chaîne

Regex

Résultat

Cette phrase contient autre chose que des chiffres

#[^0-9]#

VRAI

cette phrase contient autre chose que des majuscules et des chiffres

#[^A-Z0-9]#

VRAI

Cette phrase ne commence pas par une minuscule

#^[^a-z]#

VRAI

Cette phrase ne se termine pas par une voyelle

#[^aeiouy]$#

FAUX

ScrrmmmblllGnngngnngnMmmmmffff

#[^aeiouy]#

VRAI


Je vous conseille de faire une petite pause parce que ça ne va vraiment pas s'arranger par la suite ! Nous allons maintenant découvrir le rôle des quantificateurs qui vont nous permettre de gérer les répétitions.

Créé avec HelpNDoc Personal Edition: Créer des livres électroniques EPub facilement