Utilisation des expressions régulières
Exercices et projets
#################### Localisation des motifs ###################
localisation.pl
Voici un petit texte débile, qu'on pourra améliorer à son gout
On demande d'écrire les motifs, puis de tester, pour chercher :
- l'un des mots "moi", "toi", partout dans le texte
- les sous-chaines "moi" ou "toi".
- le mot "moi" seulement en début de phrase
- tester la différence entre recherche de mots et de sous-chaines
#!/usr/bin/perl -w
$texte="Il y a 2 mois, ce n'est pas toi qui a découvert cette vieille armoire, cachée sous la toiture\n.
Moi, je te dis que c'est bien moi, il y a 2 ou 3 mois ";
$motif=<>;
chomp($motif);
print "Recherche de $motif\n";
############# Chercher des mots dans un texte ###############
Appel : ./cherche_mots.pl fichier.txt
- version 1
Soit un texte stocké dans le fichier texte (on pourra utiliser par défaut gpl.txt en anglais, et aussi tester
regex.txt). On demande à l'utilisateur de saisir le mot recherché.
Le script doit parcourir chaque ligne du fichier et afficher chaque ligne où le mot est présent en le mettant en
valeur (si on générait du code HTML on pourrait mettre en gras ou en couleur) en l'entourant par exemple de <<
>>.
Conclure l'étude par une phrase du genre :
"le mot .... est présent ... fois dans .. lignes du fichier ..."
"le mot .... n'a pas été trouvé dans le fichier ..."
Essai avec les mots "fois", "du", "mes" (problème ! que pourrait-on faire ?)
- version 2
Modifier le script précédent pour compter les occurences des mots au cas où il n'y a pas de saisie. On améliorera en
convertissant en interne les lignes en minuscules et en "oubliant" les accents ...
############# Chercher tous les mots contenant une lettre redoublée #############
Appel : ./cherche_lettres_doubles.pl
Soit un texte stocké dans un fichier texte nommé essai.txt, qu'on pourra modifier
L'utilisateur saisit une chaine au clavier.
Le script doit afficher :
"Dans la ligne numéro .. , la lettre .. est redoublée dans le mot ..."
Conseil : pensez à utiliser le métacaractère d'ancrage \b, les variables de capture ainsi que $&
################ Exercice de conjugaison ##################
Appel : ./conjuguer.pl chanter
Reconnaitre qu'un verbe est écrit à l'infinitif, et dans ce cas donner sa conjugaison au présent de l'indicatif
- Au choix, les verbes sont entrés interactivement (par défaut "chanter") ou à partir d'un fichier
- Conseil : construire un tableau associatif admettant les pronoms (je, tu, il ...) comme clés et les
terminaisons (e, es, e, ons, ez, ent) correspondantes
- Construire une expression régulière pour reconnaitre une terminaison en "er" et capturer le radical
- Si le verbe est reconnu (par ex. "chanter", afficher la conjugaison sous la forme :
je chante
tu chantes
....
################## Conversion francs - euros #################
conversion.pl : étant donnée une phrase qui contient une somme exprimée en francs, la convertir en euros
On supposera que la somme, d'abord nombre entier puis décimal, est suivi du symbole F ou f
La phrase sera saisie. En son absence, une phrase par défaut est prévue
################ Traitement d'une archive de messages ############
Appel : message.pl inbox.txt
Il s'agit d'extraire d'un fichier inbox les éléments principaux de chaque message reçu
- récupérer le premier paramètre mis normalement dans ARGV[0]
- ouvrir ce fichier et parcourir ses lignes
- écrire les regex nécessaire pour extraire des lignes concernées, au moins l'expéditeur, le destinataire et le
sujet, précédé du numéro de ligne
- attention ! le sujet peut comporter Re: comme dans Subject: Re: PHP et les directory
- Voici un exemple : un extrait d'un message et l'affichage souhaité
------------------ extrait message ------------------
Received: by aramis.ac-creteil.fr (Postfix, from userid 331) id 4143F220C4;
Mon, 2 Dec 2002 10:30:39 +0100 (CET)
Date: Mon, 2 Dec 2002 10:30:39 +0100
From: XXX YYY <xxx.yyy@ac-creteil.fr>
To: linux@nnx.com
Subject: Re: PHP et les directory
Message-Id: <20021202093039.GC27512@ac-creteil.fr>
References: <3DEB246D.8529C378@a4-interactive.com>
MIME-Version: 1.0
Content-Type: text/plain;
charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <3DEB246D.8529C378@a4-interactive.com>
User-Agent: Mutt/1.4i
-------------------- résultat du script ---------------
30 Expéditeur XXX YYY <xxx.yyy@ac-creteil.fr>
31 Destinataire linux@nnx.com
32 Sujet PHP et les directory
############ * Reconnaissance des hyperliens d'une page WEB ###############
Appel : cherche_hyperliens.pl fichier.html
Il s'agit d'obtenir la liste des URL incluses dans tous les hyperliens de la page, chacun étant accompagné du texte
associé. On pourra tester sur les pages extrait.html ou welcome.html fournies.
- récupérer le nom du fichier (on pourra arreter plus tard si son extension n'est pas html, htm ou php)
- l'ouvrir en lecture, appliquer le motif sur chaque ligne (construction while (/regex/g/) conseillée )
- construire un tableau associatif contenant le couple (url, libellé)
- Voici un exemple :
--------------extrait.html -----------------
<LI> <a HREF = "kde-linux.html" > L'environnement graphique KDE </a>
<LI><a href="install-mandrake-cfipen.html">Exemple d'installation</a>
& <A HREF="install-reseau.html">installation par NFS</A>
<LI> <A href='demarrage-linux.html'>Démarrer (sous) Linux</a>
<LI> Organisation du <a href = systemes-fichiers.html > système de fichiers</a>
<LI> Principales <a href="commandes-generales.html">commandes utilisateurs</a>
<LI> < A href="tp-extension-systeme.html">TP Extension du système</a>
<LI> <a href="install-archivage.html">Installation d'applications et archivage </a> et <LI>
<a href="impression-linux.html">Le service d'impression</a>
<LI> Installation et réglages du <a href="x11r6-linux.html">serveur X </a>
---------------- résultat -----------------
L'environnement graphique KDE ---> kde-linux.html
système de fichiers ---> systemes-fichiers.html
Démarrer (sous) Linux ---> demarrage-linux.html
Exemple d'installation ---> install-mandrake-cfipen.html
Installation d'applications et archivage ---> install-archivage.html
Le service d'impression ---> impression-linux.html
TP Extension du système ---> tp-extension-systeme.html
commandes utilisateurs ---> commandes-generales.html
installation par NFS ---> install-reseau.html
serveur X ---> x11r6-linux.html
############ * Construction dynamique d'un fitre #################
filtre.pl
Il s'agit de construire une expression régulière capable de filtrer les lignes d'un fichier de logs (par exemple
ex020101.log) suivant l'extension de l'url demandé. Si l'url possède une extension telle que .gif .wav .mid ... la ligne
sera sautée de l'analyse.
Un fichier contenant ces extensions filtre.txt est fourni comme jeu d'essai sur ex020101.log