Un cours pour débuter en Perl


previous up contents next

Sous-sections

8. Exercices sur les expressions régulières

8.1 Exercice numéro 4

  

#!/usr/bin/perl
#  TP4
#  On vérifie que des chaines saisies peuvent correspondre
#  à une immatriculation de véhicule en france.
#  On vérifie donc que la chaine saisie
#  commence par un chiffre compris entre 1 et 9 
#  éventuellement suivi de 4 chiffres, suivi de une, deux
#  ou trois lettres, suivi de 
#      - le chiffre 0 suivi d'un chiffre ou
#      - un chiffre suivi d'un chiffre ou
#      - 2a ou 2b
print ("Entrer une immatriculation de véhicule : \n");
while (<STDIN>) {
  # chomp(); n'est pas obligatoire car $ matche la fin de la ligne
  # ou juste avant le retour charriot s'il y en a un ...
    if (/^[1-9][0-9]{0,4}[a-zA-Z]{1,3}(0[1-9]|[1-9][0-9]|2a|2b)$/) {
        print ("C'est bon $& \n");
    }
    else { print ("C'est faux $& \n");}
    print ("Entrer une immatriculation de véhicule : \n");
}
  

8.2 Exercice numéro 5

  

#!/usr/bin/perl
# TP5
#
#   Calcul d'expressions arithmétiques simples (non parenthésées)
#   saisies à la volée.
#
#   La chaine doit commencer par un nombre 
#   suivi d'un opérateur arithmétique suivi d'un nombre (n fois).
#   On admet que eval(expr) fait le calcul.
print ("Entrer une expression à calculer \n");
while (<STDIN>) {
    if (/^\d+([+*\/-]\d+)+$/) {  
        # si le - situé entre [] n'était pas positionné
        # juste avant ], il faudrait le précéder d'un
        # / car il serait alors pris comme démimiteur de
        # classe (cf. [a-z]).
        print ($_," = ",eval($_),"\n");
    }
    else {
        print ("Expression arithmétique incorrecte \n");
    }
    print ("Entrer une expression à calculer \n");
}
  

8.3 Exercice numéro 6

  

#!/usr/bin/perl
#  TP6
#
#    On vérifie que des nombres entrés au clavier sont
#    bien des entiers relatifs ou des réels.
#
print ("Entrer un nombre : \n");
while (<STDIN>) {
    chomp();
    if (/^[+|-]?\d+$/) {
        #   commence  éventuellement par un + ou un -
        #   suivi et terminé par au moins un chiffre.
        print ("$_ est un nombre entier relatif \n");
    }
    elsif (/^[+-]?\d+\.\d+$/) {
         #   commence éventuellement par un + ou un -
         #   suivi par au moins un chiffre suivi par
         #   un . suivi et terminé par au moins un
         #   chiffre.
        print ("$_ est un nombre réel \n");
    }
    else {
        print ("$_ n'est pas un nombre \n");
    }
    print ("Entrer un nombre : \n");
}
  

8.4 Exercice numéro 7

  

#!/usr/bin/perl
# TP7
#
# On entre un texte à la volée.
# Lorsque la saisie est terminée, on calcule le nombre de lignes,
# de mots et de caractères du texte.
# 
printf ("Entrer un texte libre sur plusieurs lignes \n");
@texte=<STDIN>;
chomp(@texte);
$nbmots = 0;
$nblig = 0;
$nbcar = 0;
foreach (@texte) {
  $nblig++;
  @mots=split();
  $nbmots = $nbmots + @mots;
  foreach (@mots) {
    $nbcar += length();    # length($-)
  }
}
print ("Nb de lignes saisies : $nblig \n");
print ("Nb de mots saisis : $nbmots \n");
print ("Nb de caractères saisis : $nbcar \n");
  


FD