fondamentaux de l’informatique - freecours.taillifet.free.fr/enc/algorithmique/manipulations...sed...
TRANSCRIPT
FONDAMENTAUX DE
L’INFORMATIQUE Expressions régulières et
manipulation de textes
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
Plan du cours
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
EXPRESSIONS
RÉGULIÈRES
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
Définition – expressions régulières
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
• Une expression régulière (ou expression rationnelle, en anglais regular expression) est une chaîne de caractères que l’on appelle parfois un motif (en anglais pattern) qui décrit un ensemble de chaînes de caractères possibles selon une syntaxe précise
^[0-9]{10}$
^([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})$
^[[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-
.]?[[:alnum:]])*.([a-z]{2,4})$
• http://www.expreg.com/
A quoi ça sert ?
• Valider le format de chaînes de caractères
• Rechercher un motif dans une ligne, un fichier, …
• Extraire des données selon le motif qui nous intéresse
• Décrire un langage formel
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
A quoi ça sert ?
• A jouer avec XML
<xsd:simpleType name="SSN">
<xsd:restriction base="xsd:token">
<xsd:pattern value="[0-9]{3}-[0-9]{2}-[0-9]{4}"/>
</xsd:restriction>
</xsd:simpleType>
• A jouer avec PHP…
<?php
if (eregi("^0[0-9][ -.]?([0-9]{2}[ -.]){3}[0-9]{2}$", $telephone)){
echo "Numéro de téléphone valide" ;
}
else {
echo "Numéro de téléphone incorrect" ;
}
?>
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
Début et fin
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
Ces symboles peuvent être utilisés tous deux dans un
même motif : ^a…b$ indique un motif qui commence par a
et se termine par b.
Symbole Signification Exemple
^motif Indique que le motif doit
commencer par…
^a
Accepte abcd, aa, …
Refuse Abcd, bcd, …
motif$ Indique que le motif se
termine par…
a$
Accepte papa, …
Refuse maman, DBA, …
Opérateurs
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
Symbole Signification Exemple
groupe?
Indique que le groupe
peut être répété 0 ou 1
fois
a?
Accepte rien, a
groupe* Indique que le groupe
peut être répété 0, 1 ou
plusieurs fois
a* Accepte rien, a, aa, …
groupe+
Indique que le groupe
peut être répété 1 ou
plusieurs fois (au mois
une fois)
a+
Accepte a, aa, aaa, …
groupe1|groupe2 Indique un choix alternatif
(ou exclusif)
a|b|c
Accepte a, b ou c
(motif)
Comme en maths, les
parenthèses servent à
assembler des éléments
(a|b)+
Accepte a, aa, ab, ba, bb, b,
bba, baba, …
Intervalles de reconnaissance
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
Symbole Signification Exemple
groupe{n} Indique que le groupe doit
apparaître n fois
a{6}
Accepte uniquement aaaaaa
groupe{n,}
Indique que le groupe
peut apparaître n fois ou
plus
A{3,}
Accepte aaa, aaaa, aaaaa,
…
groupe{n,m}
Indique que le groupe
peut apparaître entre n et
m fois
a{3,4}
Accepte aaa et aaaa
Refuse aa, aaaaa, …
Classes de caractères
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
[0-9] = un chiffre de 0 à 9
[a-z] = une lettre minuscule de a à z
[A-Za-z] = une lettre de a à z, majuscule ou minuscule
[A-Za-z]* = un mot, de une lettre ou plus
Symbole Signification Exemple
[abcd]
Indique que le caractère
est égal à l’un des choix
proposés
a[bcd]
Accepte ab, ac ou ad
[a-z]
Indique que le caractère
est égal à l’un des choix
dans l’intervalle proposés
a[0-3]
Accepte a0, a1, a2 et a3
Classes de caractères prédéfinies
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
Et encore d’autres sur http://www.expreg.com/symbole.php
Exemples :
Code postal simple (5 chiffres) : [:digit:]{5}
Mot de passe fort : ([:alnum:]|[:punct:]){8,}
Symbole Signification Equivalence
[:alpha:] n’importe quelle lettre [a-zA-Z]
[:alnum:] Caractère alphanumérique [0-9a-zA-Z]
[:digit:] Caractère numérique [0-9]
[:space:] Espace blanc ou séparateur de
ligne ou de paragraphe
[:punct:] Caractère de ponctuation [!"#$%&'()*+,-.\/:;?@[\\\]_`{|}~]
Classes complémentée
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
Symbole Signification Exemple
[^groupe] Tout sauf le groupe
[^1]
Accepte tout, sauf le
chiffre 1
Quelques exemples
Numéro de téléphone Numéro de téléphone : 10 chiffres (exemple : 0123456789)
• ^[0-9]{10}$
Ce numéro commence par 01 à 09 (ceci exclut des choses du type 9923456789)
• ^0[0-9][0-9]{8}$
• + accepte des séparateurs entre les paires de numéros (Accepte 01 23 45 67 89, 01-23-45-67-89, 01.23.45.67.89,...)
• ^0[0-9][ -.]?[0-9]{2}[ -.]?[0-9]{2}[ -.]?[0-9]{2}[ -.]?[0-9]{2}$
ou
• ^0[0-9][ -.]?([0-9]{2}[ -.]?){3}[0-9]{2}$
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
01 - 23 - 45 - 67 - 89
Quelques exemples
Dates Date au format aaaa/mm/jj (2013/12/13 ou 2013/1/1)
• [0-9]{4}/[0-9]{1,2}/[0-9]{1,2}
Date au format jj/mm/aaaa hh:mm:ss, les secondes étant facultatives
• [0-9]{2}/[0-9]{2}/[0-9]{4} [0-9]{2}:[0-9]{2}(:[0-9]{2})?
Date au format « mardi 12 décembre 2013 »
• (lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche) [0-9]?[0-9] (janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre) [0-9]{0,3}[0-9]
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
OUTILS DE
MANIPULATION DE TEXTE grep, sed, cut, awk, …
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
GREP Recherche de lignes correspondant à un motif donné
http://man.cx/grep(1)/fr
http://www.grymoire.com/Unix/Grep.html
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
grep - exemples
grep encrohan /etc/passwd
• recherche des lignes du fichier /etc/passwd qui
contiennent la chaîne de caractères « encrohan »
grep ^[[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-
.]?[[:alnum:]])*\.([a-z]{2,4})$ /dossier/fichier.txt
• recherche des lignes du fichier /dossier/fichier.txt qui
contiennent un email
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
SED Stream Editor
Modification d’un flux de caractères (fichier,
entrées et sorties standards, …)
http://man.cx/sed
http://doc.ubuntu-fr.org/sed
http://www.grymoire.com/Unix/Sed.html
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
sed - exemples
sed s/jour/nuit/ < fichiersource > fichierdestination
Cette commande prend en entrée le fichier « fichier
source », et, à chaque ligne où il verra le mot « jour »,
il le remplacera par « nuit »
grep ([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) monfichier.txt |
sed s/2012/2013/
Cette commande recherche les lignes de
monfichier.txt qui contiennent une date, et envoie ces
lignes à la commande sed, qui remplace la chaîne
« 2012 » par « 2013 »
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
CUT Supprimer une partie de chaque ligne d’un fichier
http://man.cx/cut(1)/fr
http://www.thegeekstuff.com/2013/06/cut-
command-examples/
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
cut - exemple
• cut -d';' -f1,2 Personnes.csv • Cette commande lit le fichier Personnes.csv, découpe chaque ligne avec le
délimiteur « ; » (option –d), et extrait les colonnes 1 et 2 (option –f)
• Résultat :
Brad;PITT
Michael;JACKSON
Cameron;DIAZ
Ségolène;ROYAL
• grep ''DIAZ'' Personnes.csv | cut -d';' –f1,2 | sed s/;/ / • Cette commande lit le fichier Personnes.csv, recherche (grep) les lignes
contenant « DIAZ », découpe (cut) chaque ligne avec le délimiteur « ; » pour extraire les colonnes 1 et 2, et transforme (sed) le résultat, en remplaçant le « ; » par un espace, pour un affichage plus agréable
• Résultat :
Cameron DIAZ
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
Fichier Personnes.csv : Brad;PITT;Homme;01/01/1965
Michael;JACKSON;Homme;01/01/1960
Cameron;DIAZ;Femme;01/01/1970
Ségolène;ROYAL;Femme;01/01/1950
AWK Langage de traitement de lignes
http://man.cx/awk
http://fr.wikipedia.org/wiki/Awk
http://cm.bell-labs.com/cm/cs/awkbook/
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
awk - exemple
awk '{ if (length($0) > max) max = length($0) }
END { print max }' fichier.txt
• Cette commande affiche la longueur de la plus longue des lignes
du fichier
awk -F: '{ print $1 }' /etc/passwd | sort
• Cette commande affiche une liste ordonnée de tous les utilisateurs
du système linux
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes
Exercices…
ENC - Fondamentaux de l'informatique - Expressions
régulières et manipulation de textes