fondamentaux de l’informatique - freecours.taillifet.free.fr/enc/algorithmique/manipulations...sed...

24
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

Upload: others

Post on 26-Sep-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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

Page 2: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

Plan du cours

ENC - Fondamentaux de l'informatique - Expressions

régulières et manipulation de textes

Page 3: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

EXPRESSIONS

RÉGULIÈRES

ENC - Fondamentaux de l'informatique - Expressions

régulières et manipulation de textes

Page 4: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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/

Page 5: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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

Page 6: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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

Page 7: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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, …

Page 8: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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, …

Page 9: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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, …

Page 10: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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

Page 11: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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 [!"#$%&'()*+,-.\/:;?@[\\\]_`{|}~]

Page 12: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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

Page 13: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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

Page 14: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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

Page 15: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

OUTILS DE

MANIPULATION DE TEXTE grep, sed, cut, awk, …

ENC - Fondamentaux de l'informatique - Expressions

régulières et manipulation de textes

Page 16: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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

Page 17: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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

Page 18: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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

Page 19: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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

Page 21: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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

Page 22: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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

Page 23: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

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

Page 24: Fondamentaux de l’informatique - Freecours.taillifet.free.fr/ENC/Algorithmique/Manipulations...sed s/2012/2013/ Cette commande recherche les lignes de monfichier.txt qui contiennent

Exercices…

ENC - Fondamentaux de l'informatique - Expressions

régulières et manipulation de textes