Expressions régulières
1) Introduction
Les expressions régulières sont utilisés pour déterminer si une chaine de caractères se trouve ou correspond à une expression. Les expressions régulières sont aussi appelés Regexps ... qui viennent de la classe Regexps :) Prenons un exemple très simple pour expliquer les expressions régulières.
Nous avons ici une variable "phrases" qui est une chaine de caractères. Elle a deux phrases puisque "n" indique le passage à la ligne ... le saut de ligne. La méthode "grep" retourne la phrase qui a le mot "neige". Donc, ces lignes de codes vont afficher :
Comme la neige en ete et comme la pluie au temps de la moisson !L'expression régulière est définie entre deux slashs (/). Nous verrons pas la suite, comment préciser des expressions. Avant cela, nous allons voir les méthodes. Ici, "grep" permet de faire ce traitement de chaines de caractères.
2) Les méthodes pour les expressions.
a) Remplacer : gsub
La méthode "gsub" permet de remplacer l'expression par un mot. Ici, les mots "neige" sont remplacés par "tempete" dans les phrases :
Comme la tempete en ete et comme la pluie au temps de la moisson ! n Ainsi la gloire ne convient pas a un homme stupide
b) Scanner : scan
La méthode "scan" permet de scanner la chaine et de retourner dans un tableau les expressions. Ici, on aura comme résultat : [et, et]. Pourquoi deux fois "et" ? Parce qu'il prend l'expression "et" et non le mot :
"Comme la neige en ete et comme la pluie au temps de la moisson ! n Ainsi la gloire ne convient pas a un homme stupide"
c) Savoir la sous-chaine : [] ou slice
"slice" ou les crochets permettent de savoir la sous chaine de la chaine. Ici, on veut le mot "Ainsi". Si on demande une sous chaine qui n'existe pas. La méthode renvoit "nil".
3) Les expressions régulières.
Une expression n'est pas seulement un mot entre deux slachs, sinon il y aurait peu d'utilité. Nous allons voir donc ce qu'on peut faire avec les expressions.
Le ^ indique que le mot est en début de ligne, donc aussi après n.
Le $ indique que le mot est en fin de ligne, donc aussi avant n.
Ici, nous avons une liste de mots : oiseau, roseau, ciseau, manteau, Anneau.
Les crochets [] permettent de rechercher tout les caractères compris dedans. Ainsi "[oic]seau" va rechercher tous les mots qui ont "oseau", "iseau" ou "ceau"
De la même manière, "^[a-z]i" va rechercher tous les mots commençant (^) par une lettre minuscule entre a et z suivie de la lettre i donc tous les mots commençant par "ai", "bi", "ci", "di", "ei", "fi", "gi" etc...
"^[aA-zZ]" se comprote pareil que l'exemple ci-dessus. La seule particularité est qu'il prend en compte tout les mots commençant par les lettres minuscules ou majuscules.
Lorsque le "^" est entre les crochets et au début de ces derniers, il fait l'effet inverse. Ainsi, "[^n]" signifie : tous les caractères sauf "n". Sur cet exemple, vous remplacez tous les caractères sauf "n" par une étoile afin de préserver le saut de ligne.
Si vous avez tout compris, vous êtes donc capable de savoir ce que fait le cinquième exemple : "mots.gsub(/^[^a-m]/, "*")". Il signifie que tous les premiers caractères, de chaques mots, différents des lettres a à m sont remplacés par une étoile.
Le point "." signifie "n'importe quel caractère". C'est un peu comme le joker dans un jeu de carte qui remplace n'importe quelle carte :). Ainsi, les mots suivant :
- oiseau sera remplacé par oiselle (ici, "eau" de "oiseau" est remplacé par "elle")
- cause sera remplacé par ellese ("cau" de "cause" est remplacé par "elle"
Le + est la répétition d'une fois ou plusieurs fois. Ici, la lettre m sera changé par la lettre "l" mais "m+" peut être "mm" ou "mmm" ou bien "mmmmmmmmmm". Ainsi le "comme" de la phrase sera changé par "cole". Résultat :
Cole un oiseau s'enfuit et cole une hirondelle vole, et cela non sans cause Ainsi une lalediction n'arrive pas sans cause veritable.
Le * est la répétition de zéro fois ou plusieurs fois. C'est à dire ? Ici, "om*" correspond à "o" (sans la lettre "m" = zéro fois) ou à "om" ou bien à "ommm" ou alors "ommmmmmmmmmmmmm". Du coup, toutes les lettres "o" seront remplacés par "l" ... ainsi le "comme" de la phrase sera changé par "Cle". Résultat :
Cle un liseau s'enfuit et cle une hirlndelle vlle, et cela nln sans cause Ainsi une maledictiln n'arrive pas sans cause veritable.
Le ? est la répétion de zéro fois ou une fois. Ainsi pour ici, "om?" correspond seulement à "o" ou "om". Ainsi le "comme" de la phrase sera changé par "Clme". Résultat :
Clme un liseau s'enfuit et clme une hirlndelle vlle, et cela nln sans cause Ainsi une maledictiln n'arrive pas sans cause veritable.
Le | est un "ou". Ruby prend la phrase ayant un y ou un r. Ici, il affiche les deux phrases.
Le d signifie à [0-9] soit tout les chiffres. Ici, il remplace "56D34" par "**D**"
Le D est le contraire de d. il faut donc faire attention aux majuscules qui ont une signification différente.
Le w est tout les chiffres et lettres. Ainsi toute la phrase sera modifiée. W est donc le contraire.
Vous devez faire renter chaque mot d'une phrase ayant seulement des lettres miniscules, majuscules et sans accents dans un tableau.
Exemple :Doit être : ["Liberez", "votre", "creativite"]
Réponse :
Pour retourner une chaine de caractères dans un tableau, il faut utiliser la méthode "scan" :
Vous prenez tout les sous chaines ayant des plusieurs fois (+) des caractères de a à z et de A à Z ([aA-zZ])

