playlist Les expressions rationnelles - Partie 1

Publié il y a environ 3 ans dans la série : Ruby - Formation complète
Nicolas Cavigneaux
Votre formateur
Nicolas Cavigneaux

A la recherche d'un langage polyvalent, j'ai fait la découverte de Ruby en 2003. J'ai donc très vite commencé à utiliser Ruby au quotidien pour des tâches diverses et variées (scripting, applications lourdes…).

Courant 2004, une vague de fraicheur est apparue avec l'arrivée de Ruby on Rails qui m'a de suite conquis. J'ai donc décidé de participer activement à la communauté (forums, patches, librairies, …). En 2010, je fais la rencontre de Martin Catty et retrouve dans sa vision la rigueur et les bonnes pratiques que j'aime mettre en place, le déclic a donc été immédiat.

Synbioz met en place des solutions robustes sur la base d'outils modernes et funs, je veux faire partie de l'aventure.

Catégories : Développement


Vidéo dédiée à la découverte des expressions rationnelles en ruby. Cette vidéo fait partie d'une série qui a pour but de vous faire découvrir les bases de la programmation en Ruby et des éléments de langage les plus utilisés au quotidien.

Afficher le transcript complet de la vidéo

Bienvenue dans cette vidéo consacrée à la découverte de l’utilisation des expressions rationnelles en Ruby.


Les expressions rationnelles, ou parfois appelées à tord “expressions régulières”, sont des expressions qui permettent de décrire un motif à rechercher dans une chaîne.


Comme d’habitude, nous ferons les démonstrations dans IRB.


La théorie


Les expressions rationnelles peuvent être déclarées grâce une paire de slashes, avec la notation %r ou encore grâce à Regexp.new :

s = "Ruby"
/Ruby/ =~ s
/[Rr]uby/ =~ s
%r(^abc) =~ s
Regexp.new("xyz%") =~ s


Il est possible d’utiliser des modifieurs pour modifier le comportement de l’expression rationnelles :

/ruby/i =~ "Ruby"


Il existe beaucoup d’autres ancres et modifieurs utilisables dans les expressions rationnelles. Une bonne compréhension vous apportera beaucoup de bénéfices dans vos développements.


Faire le tour des possibilités prendrait bien plus de temps qu’on en a pour cette vidéo mais heureusement la documentation officielle de la classe Regexp est particulièrement exhaustive.


C’est un sujet tellement vaste que des livres entiers sont consacrés au sujet.


En pratique


Les échappements


Vous voudrez parfois rechercher des caratères qui correspondent à des caractères spéciaux dans les expressions rationnelles. Il faudra donc les échapper.


Vous pourrez les échapper à la main :

/./ =~ s
/\./ =~ s


mais dans les cas plus complexes, il est préférable d’utiliser la méthode escape :

Regexp.escape("[*?]")


Début et fin de chaînes, de lignes et de mots


Les expressions rationnelles sont un bon moyen de détecter les débuts et fin de chaînes, de lignes et de mots.


Chercher un motif en début de ligne utilisera l’ancre “^”, pour la fin de ligne on utilisera “$” :

s = "abc def ghi"
/abc/ =~ s
/def/ =~ s
/^def/ =~ s
/def$/ =~ s
/ghi$/ =~ s


Si on remplace les espaces par des retours à la ligne, les résultats seront différents :

s = "abc\ndef\nghi"
/abc/ =~ s
/def/ =~ s
/^def/ =~ s
/def$/ =~ s
/ghi$/ =~ s


D’autres ancres nous permettent de rechercher en début et fin de chaîne sans prendre en compte les retours à la ligne :

s = "abc\ndef\nghi"
/\Aabc/ =~ s
/\Adef/ =~ s
/def\Z/ =~ s
/ghi\Z/ =~ s


On ne cherche donc plus en début ou fin de ligne mais bien en début et fin de chaîne ce qui est tout à fait différent.


De la même façon, on peut repérer les limites des mots ou au contraire tout ce qui n’en est pas :

s = "Ruby is awesome"
s.gsub(/\b/, "|")
s.gsub(/\B/, "-")


Conclusion


Les expressions rationnelles sont donc un moyen très puissant d’analyser du texte mais c’est aussi un outil assez difficile à prendre en main. Nous n’avons qu’effleuré les possibilités dans cette vidéo.


La vidéo suivante nous permettra d’en apprendre un peu plus.