FTLS.org 
Francais     English
 
 
Accueil
 
 Linux
Introduction
Liens
 
 Initiation
Internet
HTML
CGI
Perl
 
 Archives
Java
Perl Tools
Scripts CGI
Scripts PHP
 
 Calculatrices
HP 48
TI 92
 
 Gratuit du Net
A Gratuit
Comparatifs
Se divertir
 
 Aide Webmasters
Trucs & Astuces
JavaScript
 
 Site
Partenaires
Contact
 
 Powered by
linux
 

Initiation


Initiation au Perl



7. La gestion / modifications des chaînes de caractères

    7.1 Opérateurs sur les chaînes de caractères

        Les opérations sur les chaînes de caractères, sont simplifiée en Perl :

    $a = $b . $c;    # Concaténation de $b et $c
    $a = $b x $c;    # $b répété $c fois
    $a = substr($b, 5, 10); # Garde que les caractères entre la 5° et la 10° position
    $a = lc($b);    # Transforme en minuscule $b
    $a = uc($b);    # Transforme en majuscule $b
    $a = lcfirst($b);    # Transforme en minuscule le premier caractère de $b
    $a = ucfirst($b);    # Transforme en majuscule le premier caractère de $b
    $a = length($b);    # Renvoie le nombre de caractères de $b

      7.1.1 fonction join

          La fonction join prend les éléments d'une liste et les convertit en une chaîne de caractère. Les éléments sont ajouter les uns à la suite des autres en utilisant le séparateur 'sep'.
          join(<sep>, <@tab>);

      Exemple :

      @tab = ('Mot1', 'Mot2', 'Mot3', 'Mot4');
      $resultat = join(" , ", @tab);
      print $resultat;
          # Affichera Mot1 , Mot2 , Mot3 , Mot4

    7.2 Expressions régulières

        Une des possibilités les plus utiles en Perl (si ce n'est LA plus utile) est la manipulation des chaînes de caractères. Au coeur du systèmes, les Expressions Régulières.

        Une expression régulière est contenue par des slash "/", est sont utilisées pour vérifier la présence ou l'absence d'un motif dans une chaîne de caractère.

    7.3 Appartenance

        Grâce à l'utilisation de l'opérateur =~ ou != ont peut tester si un motif appartient ou pas à une chaîne de caractère.

    Exemple :

    $phrase =~ /le/ # renverra 1 ou nul suivant que $phrase contient ou pas le motif "le"
    $phrase !~ /le/ # renverra nul ou 1 suivant que $phrase contient ou pas le motif "le"

    $phrare = "Mon OS préféré est linux.";
    if ($phrase =~ /linux/) {
        print "Bravo\n";
    }
    # Condition vrai.

    7.4 Notions avancées

        L'exemple précédant montre une limite par exemple si "linux" est écrit "Linux" le teste sera faut. C'est pour cela qu'il existe des modificateurs et des caractères spéciaux permettant d'accroître l'efficacité des expressions régulières...

        Les modificateurs permettent de modifier l'interprétation des expressions régulières. Ce modificateur est placé après le / de fermeture exemple =~ /motif/modificateur.

    i    Reconnaissance de motif indépendamment de la casse (majuscules/minuscules).
    m    Permet de traiter les chaînes multi-lignes. Les caractères ``^'' et ``$'' reconnaissent alors n'importe quel début ou fin de ligne plutôt que début ou fin de chaîne.
    s    Permet de traiter une chaîne comme une seule ligne. Le caractère ``.'' reconnaît alors n'importe quel caractère... même une fin de ligne qui normalement n'est pas reconnue.
    x    Augmente la lisibilité de vos motifs en autorisant les espaces et les commentaires.
        Exemple :
    if ($phrase =~ /linux/i) {
        # Sera vrai pour linux, LINUX, Linux, LinuX, lINUx...
        print "Bravo\n";
    }


        Les caractères spéciaux comme leurs noms l'indiquent sont des caractères intégrés au motif. Voici certain de ces caractères spéciaux, et leurs significations.

    .    # Reconnaît n'importe quel caractère, excepté les retours chariot.
    ^    # Reconnaît le début d'un ligne ou d'une.
    $    # Reconnaît la fin d'une ligne ou d'une chaîne.
    *    # Reconnaît 0 fois ou plus le dernier caractère.
    +    # Reconnaît 1 fois ou plus le dernier caractère.
    ?    # Reconnaît 0 fois ou 1 fois le dernier caractère.
    {n}    # Reconnaît n fois exactement le dernier caractère.
    {n,}    # Reconnaît au moins n fois le dernier caractère.
    {n,m}    # Reconnaît au moins n fois mais pas plus de m fois le dernier caractère.
    \    # Annule le sens caractère spécial qui suit.
    |    # Alternative
    ()    # Groupement ou modèle
    []    # Classe de caractères


        Les classes de caractères [] (crochet) sont utilisées pour assortir n'importe lequel des caractères qu'il contiennent. A l'intérieur des crochets, "-" signifie : entre et "^" signifie : pas.

    [ftls]    # Soit f ou t ou l ou s
    [^ftls]    # Soit pas f ou pas t ou pas l ou pas s
    [a-z]    # Toutes les lettres de a à z inclus
    [^a-z]    # Pas de lettre minuscule
    [a-zA-Z]    # Pas de lettres
    [a-z]+    # N'importe quelle enchaînement de lettres


        Pour facilité l'utilisation des classe de caractères il existe un certain nombre de groupe près définit.

    \w    [a-zA-Z0-9_]    Reconnaît un caractère de "mot" (alphanumérique plus "_").
    \W    [^a-zA-Z0-9_]    Reconnaît un caractère de non-"mot".
    \d    [0-9]    Reconnaît un chiffre.
    \D    [^0-9]    Reconnaît un caractère autre qu'un chiffre.
    \s            Reconnaît un caractère d'espacement (espace, tab, retour chariot, etc...)
    \S            Reconnaît un caractère autre qu'un espacement.


        La barre verticale représente "ou", et les parenthèses sont utilisées pour grouper :

    voiture|moto    # Soit une voiture soit une moto
    (ht|f)tp    # Soit http soit ftp
    (to)+        # Un ou plusieurs to (to, toto, tototo, totototo....)


        Il existe d'autre caractères spéciaux :

    \b    Reconnaît la limite d'un mot
    \B    Reconnaît autre chose qu'une limite de mot
    \A    Reconnaît uniquement le début de la chaîne
    \Z    Reconnaît uniquement la fin de la chaîne (ou juste avant le caractère de nouvelle ligne final)
    \z    Reconnaît uniquement la fin de la chaîne


        Lorsque l'on utilise les Groupements (), les valeurs de ces groupements sont mémorisées est peuvent être rappelée par les variables $1,...,$9, ou utilisé dans l'expression de la substitution même avec \1,...,\9.

    Exemple :
    if ($time = /Time: (..):(..):(..)/) {
        $heures = $1;
        $minutes = $2;
        $secondes = $3;
    }

    7.5 Substitution

        Perl sait aussi effectuer des substitutions basées sur ces expressions. On peut donc le faire avec la fonction s. (s'ajoute devant le premier / de l'expression régulière). Encore une fois, on utilise l'opérateur =~.

    Exemple :

    $phrase = "Mon OS préféré est linux.";
    $phrase =~ s/linux/Linux/;
    print $phrase."\n";
        # affichera "Mon OS préféré est Linux."
        L'opération de substitution ainsi utilisée ne permet de ne remplacer que le premier occurrence de la chaîne. Pour pouvoir remplacer toutes les occurrence, il suffit d'ajouter le modificateur "g" après de "/". De plus les modificateurs vu précédaments sont toujours valides.

    Exemple :
    $phrase = "Mon OS préféré est LINUX, linux, LinuX...";
    $phrase =~ s/linux/Linux/gi;
    print $phrase."\n";
        # affichera "Mon OS préféré est Linux, Linux, Linux..."


        Il est aussi possible d'utiliser la mémorisations des groupements dans les substitutions.

    Exemple :
    $phrase = "Mon OS préféré est Linux"; $phrase =~ s/(linux)/Linux/gi;
    print "Mon OS préféré est".$1."\n";
        # affichera "Mon OS préféré est linux..."


        Après une recherche, les variables $` ou $& ou $' (lecture seule) contiennent respectivement, la partie avant la chaîne trouvée, la chaîne trouvée, et la partie après la chaîne trouvée.

    7.6 Traduction

        Il existe aussi un fonction traduction (tr) qui permet le remplacement caractère par caractère. Attention, la plupart des caractères spéciaux ne sont pas reconnu par tr.

    Exemple :

    $phrase =~ tr/abc/edf/    # Traduit les a en e, des b en d, les c en f.
    $phrase =~ tr/a-z/A-Z/; # Traduit les minuscules en majuscules.

    7.7 Eclatement

        La fonction split permet décomposer une chaîne en une liste d'éléments en la coupant aux motif définit. Sa syntaxe est la suivant @tableau = split(/motif/, $chaine);

    Exemple1 :

    $phrase = "12 15 25";
    ($v1, $v2) = split(/\s+/, $phrase);
        #On a alors $v1 = "12", $v2 = "15"


    Exemple2 :
    $phrase = "Mon OS préféré est Linux";
    @list = split(/\s+/, $phrase);
    foreach $mot (@list) {
        print $mot."\n";
    }
        Ce programme donnera le résultat suivant :
    Mon
    OS
    préféré
    est
    Linux



 
© Copyright 2000 FTLS (Tyndiuk Frédéric). All rights reserved.
Last Update 08/03/2000 - Send all comments to webmaster@ftls.org