Aller au menu - Aller au contenu

Les expressions régulières (Partie 1/2)


Informations sur le tutoriel

Avatar
Auteur : M@teo21
Difficulté : Facile
Visualisations : 56 891 829
Licence : Creative Commons BY-NC-SA


Plus d'informations Plus d'informations

Historique des mises à jour

  • Le 10/03/2010 à 13:57:19
    Nouveaux chapitres MySQL avec PDO : écriture de données et MiniChat
  • Le 06/03/2010 à 18:59:37
    Nouveau chapitre sélection de données SQL avec PDO et requêtes préparées
  • Le 03/03/2010 à 12:53:24
    Correction orthographique.
Vous avez toujours rêvé d'apprendre à parler chinois ?
Ca tombe bien ! :D Dans ce chapitre, je vais vous apprendre à écrire des trucs comme ça :

#(((https?|ftp)://(w{3}\.)?)(?<!www)(\w+-?)*\.([a-z]{2,4}))#

Croyez-moi si vous voulez, mais ce truc imprononçable... eh bien ça veut vraiment dire quelque chose ! Si si je vous jure ! :p
Ok, je ne vous le cache pas, y'a du boulot parce qu'on va traiter ici de ce que je trouve être un des trucs les plus difficiles du PHP, mais paradoxalement c'est très utile, intéressant (certains diront même "passionnant").

Mais c'est un truc de fou.
Il faut bien retenir que c'est un chapitre difficile (en fait, je suis obligé d'étaler ça sur 2 chapitres), mais que ça vaut vraiment le coup de s'y intéresser parce que vous allez pouvoir faire des tas de trucs grâce à ça.

A quoi ça sert ? En fait, c'est un système très puissant et très rapide pour faire des recherches dans des chaînes de caractères (des phrases par exemple). C'est une sorte de fonctionnalité Rechercher / Remplacer très poussée, dont vous ne pourrez plus vous passer une fois que vous saurez vous en servir.
Des exemples ?
  • Vérifier automatiquement si l'adresse e-mail entrée par le visiteur a une forme valide (comme "dupont@free.fr")
  • Modifier une date que vous avez au format américain (08-05-1985) pour la mettre dans le bon ordre en français (05/08/1985)
  • Remplacer automatiquement toutes les adresses "http://" par des liens cliquables, comme ça se fait sur certains forums.
  • Ou encore créer votre propre langage simplifié à partir du HTML, comme le fameux bbCode ([b][/b]...)
Ouvrez grand vos oreilles et attachez vos ceintures. C'est partiii yiiiiihhhaaaa !!! :D
Chapitre précédent Sommaire Chapitre suivant

Où utiliser une Regex ?

POSIX ou PCRE ?



Bonne nouvelle : vous n'aurez pas à activer quoi que ce soit pour faire des expressions régulières (pas comme c'était le cas pour la librairie GD).

Il existe 2 types d'expressions régulières, qui répondent aux doux noms de :
  • POSIX : c'est un langage d'expressions régulières mis en avant par PHP, qui se veut un peu plus simple que PCRE (ça n'en reste pas moins assez complexe). Toutefois, son principal et gros défaut je dirais, c'est que ce "langage" est plus lent que PCRE.
  • PCRE : ces expressions régulières sont issues d'un autre langage (le Perl). Considérées comme (un peu) plus complexes, elles sont surtout bien plus rapides et performantes.


PHP propose donc de choisir entre POSIX et PCRE. Et, pour ma part, le choix est tout fait : nous allons étudier PCRE.
Rassurez-vous, ce n'est pas beaucoup plus compliqué que POSIX, mais ça a l'avantage d'être très rapide. Et à notre niveau de PHP, ce qui nous intéresse justement c'est la rapidité :)

Les fonctions qui nous intéressent



Nous avons donc choisi PCRE. Il existe plusieurs fonctions utilisant le "langage PCRE" qui commencent toutes par "preg_" :
  • preg_grep
  • preg_split
  • preg_quote
  • preg_match
  • preg_match_all
  • preg_replace
  • preg_replace_callback
Chaque fonction a sa particularité, certaines permettent de faire simplement une recherche, d'autre une recherche / remplacement, mais leur gros point commun c'est qu'elles utilisent un "langage" identique pour faire une recherche.
Lorsque vous aurez appris le langage PCRE, vous pourrez utiliser chacune d'elles sans problème.


Pour éviter d'avoir trop de théorie (ça serait vraiment barbant), on va commencer pour s'entraîner à utiliser une de ces fonctions : preg_match.

preg_match



En utilisant cette fonction, vous pourrez vous exercer en même temps que moi et voir petit à petit si vous avez compris le principe du langage PCRE.
Il faut juste savoir que cette fonction renvoie un booléen : VRAI ou FAUX (true ou false en anglais). Elle renvoie true (vrai) si elle a trouvé le mot que vous cherchiez dans la chaîne, faux (false) si elle ne l'a pas trouvé.

Vous devez lui donner 2 informations : votre regex (c'est le petit surnom qu'on donne à "expression régulière") et la chaîne dans laquelle vous faites une recherche.
Voici par exemple comment on peut s'en servir, à l'aide d'une condition if :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
if (preg_match("** Votre REGEX **", "Ce dans quoi vous faites la recherche"))
{
echo 'Le mot que vous cherchez se trouve dans la chaîne';
}
else
{
echo 'Le mot que vous cherchez ne se trouve pas dans la chaîne';
}
?>


A la place de "** Votre REGEX **", vous taperez quelque chose en langage PCRE, comme ce que je vous ai montré au début de ce chapitre :

#(((https?|ftp)://(w{3}\.)?)(?<!www)(\w+-?)*\.([a-z]{2,4}))#


C'est justement ceci qui nous intéresse, c'est sur ça que nous allons nous pencher par la suite.
Parce que, au cas où vous l'auriez pas remarqué, ce truc-là est franchement pas évident à lire... Et le chinois a l'air tout simple à côté :lol:

Des recherches simples

On va commencer à faire des recherches très simples et très basiques. Normalement, vous ne devriez pas avoir trop de mal pour l'instant à suivre, c'est quand on mélange tout après que ça se complique :p

Première chose importante à savoir : une regex (= expression régulière) est toujours entourée de caractères spéciaux appelés délimiteurs.
On peut choisir n'importe quel caractère spécial comme délimiteur, et pour éviter de tourner en rond trop longtemps je vais vous en imposer un : le dièse !
Votre regex se trouve alors entourée de dièses, comme ceci :

#Ma regex#


Euh, mais à quoi servent les dièses, puisque de toute façon la regex est entourée par des guillemets dans la fonction PHP ?


Parce que, si on veut, on peut utiliser des options. On ne va pas parler des options tout de suite (on n'en a pas besoin pour commencer), mais sachez que ces options se mettent après le second dièse, comme ceci :

#Ma regex#Options


A la place de "Ma regex", vous devez mettre le mot que vous recherchez.
Prenons un exemple : vous aimeriez savoir si une variable contient le mot "guitare". Il vous suffit d'utiliser la regex suivante pour faire la recherche :

#guitare#

Dans un code PHP, ça donne :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
if (preg_match("#guitare#", "J'aime jouer de la guitare."))
{
echo 'VRAI';
}
else
{
echo 'FAUX';
}
?>




Comme vous pouvez le voir, notre script affiche VRAI parce que le mot guitare a été trouvé dans la phrase "J'aime jouer de la guitare." :D

Retenez bien ce petit bout de code, nous allons le garder un moment en changeant parfois la regex, parfois la phrase dans laquelle on fait la recherche.
Pour que vous compreniez bien comment les regex se comportent, je vais vous présenter les résultats dans un tableau, comme ceci :

Chaîne Regex Résultat
J'aime jouer de la guitare. #guitare# VRAI
J'aime jouer de la guitare. #piano# FAUX


Ok, c'est compris jusque-là ? :)
On a trouvé le mot "guitare" dans la première regex, mais pas "piano" dans la seconde.
Jusque-là c'est facile, mais je vais pas tarder à compliquer :p

Et tu casses, tu casses, tu casses...



Il y a quelque chose qu'il faut que vous sachiez : les regex font la différence entre majuscules et minuscules (on dit qu'elles sont "sensibles à la casse").Tenez, regardez ces 2 regex par exemple :

Chaîne Regex Résultat
J'aime jouer de la guitare. #Guitare# FAUX
J'aime jouer de la guitare. #GUITARE# FAUX


Comment faire si on veut que nos regex ne fassent plus la différence entre majuscules et minuscules ?
On va utiliser justement une option. C'est la seule que vous aurez besoin de retenir pour le moment. Il faut rajouter la lettre "i" après le 2ème dièse, et la regex ne fera plus attention à la casse :

Chaîne Regex Résultat
J'aime jouer de la guitare #Guitare#i VRAI
Vive la GUITARE ! #guitare#i VRAI
Vive la GUITARE ! #guitare# FAUX


Dans le dernier exemple, je n'ai pas mis l'option "i" alors on m'a répondu FAUX.
Mais dans les autres exemples, vous pouvez voir que le "i" a permis de ne plus faire la différence majuscules / minuscules :)

Le symbole OU



On va maintenant utiliser le symbole OU, que vous avez déjà vu dans le chapitre sur les conditions : c'est la barre verticale "|".
Grâce à elle, vous allez pouvoir laisser plusieurs possibilités à votre regex. Ainsi, si vous tapez :

#guitare|piano#


Cela veut dire que vous cherchez soit le mot "guitare", soit le mot "piano". Si un des 2 mots est trouvé, la regex répond VRAI.
Voici quelques exemples :

Chaîne Regex Résultat
J'aime jouer de la guitare. #guitare|piano# VRAI
J'aime jouer du piano. #guitare|piano# VRAI
J'aime jouer du banjo. #guitare|piano# FAUX
J'aime jouer du banjo. #guitare|piano|banjo# VRAI


Dans le dernier exemple, j'ai mis 2 fois la barre verticale. Cela signifie que l'on recherche guitare OU piano OU banjo.
C'est compris jusque-là ? ^^

Parfait ! :D
On peut maintenant voir les histoires de début et de fin de chaîne, et ensuite on pourra passer à la vitesse supérieure :p

Début et fin de chaîne



Les regex permettent d'être très très précis, vous allez bientôt vous en rendre compte.
Jusqu'ici en effet, le mot pouvait se trouver n'importe où. Mais supposons que l'on veuille que la phrase commence ou se termine par ce mot ?

Nous allons avoir besoin des deux symboles suivants, retenez-les :
  • ^ (accent circonflexe) : indique le début d'une chaîne.
  • $ (dollar) : indique la fin d'une chaîne.
Ainsi, si vous voulez qu'une chaîne commence par "Bonjour", il faudra utiliser la regex :

#^Bonjour#

Si vous mettez le symbole "^" devant le mot, alors ce mot devra obligatoirement se trouver au début de la chaîne, sinon on vous répondra FAUX.

De même, si on veut vérifier que la chaîne se termine par "zéro", on écrira cette regex :

#zéro$#


Compris ? Voici une série de tests pour que vous voyiez bien comment ça fonctionne :

Chaîne Regex Résultat
Bonjour petit zéro #^Bonjour# VRAI
Bonjour petit zéro #zéro$# VRAI
Bonjour petit zéro #^zéro# FAUX
Bonjour petit zéro !!! #zéro$# FAUX


Simple non ?
Dans le dernier cas ça ne fonctionne pas, car la chaîne ne se termine pas par "zéro" mais par "!!!". Donc forcément, on nous répond faux...

Les classes de caractères

Jusqu'ici, vous avez pu faire des recherches assez simples, mais encore rien de vraiment extraordinaire. L'outil de recherche de Word fait bien tout cela après tout :p
Mais, rassurez-vous, les Regex sont bien plus riches (et complexes) que l'outil de recherche de Word, vous allez voir ;)

Grâce à ce qu'on appelle les classes de caractères, on peut faire varier énormément les possibilités de recherche.

Tout cela tourne autour des crochets. On place une classe de caractères entre crochets dans une regex.
Cela nous permet de mettre énormément de possibilités de recherche à la fois, tout en restant très précis.

Des classes simples



Ne tournons pas en rond plus longtemps, et regardons attentivement cette regex :

#gr[io]s#

Entre crochets, c'est ce qu'on appelle la classe de caractères. Cela signifie qu'une des lettres à l'intérieur peut convenir.
Dans ce cas-ci, notre regex reconnaît 2 mots : "gris" et "gros". C'est un peu comme le OU qu'on a appris tout à l'heure, sauf que ça s'applique ici à une lettre et non pas à un mot.

D'ailleurs, si vous mettez plusieurs lettres comme ceci :

#gr[ioa]s#

Cela signifie "i" OU "o" OU "a". Donc notre regex reconnaît les mots "gris", "gros" et "gras" !
Allez, on se fait quelques exemples :
Chaîne Regex Résultat
La nuit, tous les chats sont gris #gr[aoi]s# VRAI
Bêrk, c'est trop gras comme nourriture #gr[aoi]s# VRAI
Bêrk, c'est trop gras comme nourriture #gr[aoi]s$# FAUX
Je suis un vrai zéro #[aeiouy]$# VRAI
Je suis un vrai zéro #^[aeiouy]# FAUX


Je suppose que vous comprenez les deux premières regex. Mais je pense que vous auriez besoin d'explications sur les trois dernières :
  • Pour "Bêrk, c'est trop gras comme nourriture", j'ai utilisé cette fois la regex #gr[aoi]s$#. Si vous avez bien suivi ce que je vous ai dit tout à l'heure, ça veut dire que notre chaîne doit se terminer par "gris", "gras" ou "gros". Or, ici le mot est au milieu, donc on nous répond FAUX. Essayez de le mettre à la fin et vous verrez que ça marche ;)
  • Ensuite "Je suis un vrai zéro" avec la regex #[aeiouy]$#. Celle-ci signifie que notre regex doit se terminer par une voyelle (aeiouy). Ca tombe bien, la dernière lettre de la chaîne est la lettre "o", donc on nous répond VRAI :)
  • Enfin, même chaîne mais avec la regex #^[aeiouy]#. Cette fois, la chaîne doit commencer par une voyelle (en minuscule en plus). Or, la chaîne commence par "J", donc la réponse est FAUX !
Ca va, je ne vous ai toujours pas largué en route ? :p
Si à un moment vous sentez que vous avez décroché, n'hésitez pas à relire un peu au-dessus, ça ne vous fera pas de mal ;)

Les intervalles de classe



Mais attendez ! Vous n'avez pas tout vu ! :D
C'est à partir de ce moment-là que les classes vont commencer à vous bluffer :)

Grâce au symbole "-" (le tiret), on peut autoriser toute une plage de caractères.
Par exemple, tout à l'heure on a utilisé la classe [aeiouy]. Ok c'est pas trop long.
Mais que dites-vous de la classe [abcdefghijklmnopqrstuvwxyz] ? Tout ça pour dire que vous voulez qu'il y ait une lettre ?

J'ai mieux ! :D
Vous avez le droit d'écrire : [a-z] ! Avouez que c'est plus court ! Et si vous voulez vous arrêter à la lettre "e", pas de problème non plus : [a-e].
En plus, ca fonctionne aussi avec les chiffres : [0-9]. Si vous voulez plutôt un chiffre entre 1 et 8, tapez : [1-8]

Encore mieux ! Vous pouvez mettre 2 plages à la fois dans une classe : [a-z0-9]. Cela signifie "N'importe quelle lettre (minuscule) OU un chiffre".
Bien entendu, vous pouvez aussi autoriser les majuscules, sans passer par les options comme on l'a fait tout à l'heure. Ca donnerait : [a-zA-Z0-9].
[a-zA-Z0-9] est donc une façon plus courte d'écrire :
[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789] (j'espère que vous comprenez, parce que j'ai pas envie de m'embêter à taper toutes les lettres de l'alphabet 50 fois si ça ne sert à rien :lol: )

Faisons quelques tests voulez-vous ? :)
Chaîne Regex Résultat
Cette phrase contient une lettre #[a-z]# VRAI
cette phrase ne comporte pas de majuscule ni de chiffre #[A-Z0-9]# FAUX
Je vis au 21ème siècle #^[0-9]# FAUX
<h1>Une balise de titre HTML</h1> #<h[1-6]># VRAI


Le dernier exemple est particulièrement intéressant car on se dirige doucement vers la pratique. On y vérifie justement si la chaîne comporte une balise HTML de titre (<h1> ou <h2> etc... jusqu'à <h6>).

Et pour dire que j'en veux pas ?



Si vous ne voulez PAS des caractères que vous énumérez dans votre classe, il va falloir mettre le symbole "^" à l'intérieur.

Mais ?! o_O
Je croyais que ce caractère servait à indiquer le début d'une chaîne ?

Oui, mais si vous le mettez à l'intérieur d'une classe, il sert à dire que vous ne VOULEZ PAS de ce qui se trouve à l'intérieur de la classe.
Ainsi, la regex suivante :

#[^0-9]#

... signifie que vous voulez que votre chaîne comporte au moins un caractère qui ne soit pas un chiffre.

Maintenant, je fais chauffer vos cervelles :

Chaîne Regex Résultat
Cette phrase contient autre chose que des chiffres #[^0-9]# VRAI
cette phrase contient autre chose que des majuscules et des chiffres #[^A-Z0-9]# VRAI
Cette phrase ne commence pas par une minuscule #^[^a-z]# VRAI
Cette phrase ne se termine pas par une voyelle #[^aeiouy]$# FAUX
ScrrmmmblllGnngngnngnMmmmmffff #[^aeiouy]# VRAI


Maintenant, faites une pause parce que ça va pas s'arranger par la suite :p

Les quantificateurs

Les quantificateurs, ce sont des symboles qui permettent de dire combien de fois peuvent se répéter un caractère, ou une suite de caractères.
Par exemple, pour reconnaître une adresse e-mail comme francois@free.fr, il va falloir dire : "Elle commence par une ou plusieurs lettres, elle est suivi d'un @ (arobase), suivie de deux lettres au moins, suivi d'un point, et enfin de 2 à 4 lettres (pour le .fr, .com., mais aussi .info (ça existe !)).

Bon pour le moment notre but n'est pas d'écrire une regex qui permet de savoir si l'adresse e-mail rentrée par le visiteur a la bonne forme (c'est encore trop tôt). Mais tout ça pour vous dire qu'il est indispensable en général d'indiquer combien de fois une lettre peut se répéter !

Les symboles les plus courants



Vous devez retenir 3 symboles :
  • ? (point d'interrogation) : ce symbole indique que la lettre est facultative. Elle peut y être 0 ou 1 fois.
    Ainsi, #a?# reconnaît 0 ou 1 "a".
  • + (signe plus) : la lettre est obligatoire. Elle peut apparaître 1 ou plusieurs fois.
    Ainsi, #a+# reconnaît "a", "aa", "aaa", "aaaa" etc...
  • * (étoile) : la lettre est facultative. Elle peut apparaître 0, 1 ou plusieurs fois.
    Ainsi, #a*# reconnaît "a", "aa", "aaa", "aaaa" etc... Mais s'il n'y a pas de "a", ça fonctionne aussi !
Notez que ces symboles s'appliquent à la lettre se trouvant directement devant. On peut ainsi autoriser le mot "chien" qu'il soit au singulier comme au pluriel, avec la regex #chiens?# (fonctionnera pour "chien" et "chiens").

Vous pouvez donc autoriser la répétition d'une lettre. Je viens de vous montrer le cas pour "chien". Mais on peut aussi s'en servir pour une lettre au milieu du mot, comme ceci :

#bor?is#

Ce code reconnaîtra "boris" et "bois" !

Et si je veux que ce soient 2 lettres ou plus qui se répètent, comment je fais ?
Il faut utiliser des parenthèses. Par exemple, si on veut reconnaître "Ayayayayayay" (le cri de guerre de Speedy Gonzalez :p ), on devra taper la regex suivante :

#Ay(ay)*#

Ce code reconnaîtra "Ay", "Ayay", "Ayayay", "Ayayayay", "Ouïe Aïe Aïe" (non je rigole pour le dernier ;) ).

Vous pouvez utiliser le symbole "|" dans les parenthèses. La regex :
#Ay(ay|oy)*#
... renverra vrai par exemple pour "Ayayayoyayayayoyoyoyoyayoy" ! C'est le "ay" OU le "oy" répété plusieurs fois, tout simplement !

Autre bonne nouvelle, vous pouvez mettre un quantificateur après une classe de caractères (vous savez, avec les crochets !). Ainsi
#[0-9]+#
... permet de reconnaître n'importe quel nombre, du temps qu'il y a au moins un chiffre !

Faisons quelques tests pour bien rentrer ça dans la tête :
Chaîne Regex Résultat
eeeee #e+# VRAI
ooo #u?# VRAI
magnifique #[0-9]+# FAUX
Yahoooooo #^Yaho+$# VRAI
Yahoooooo c'est génial ! #^Yaho+$# FAUX
Blablablablabla #^Bla(bla)*$# VRAI


Les derniers exemples sont très intéressants. La regex (#^Yaho+$#) signifie que la chaîne doit commencer et finir par le mot "Yahoo". Il peut y avoir 1 "o" ou plusieurs. Ainsi "Yaho", "Yahoo", "Yahooo" etc marchent... Mais vous ne devez rien mettre avant ni après car j'ai indiqué que c'était un début ET une fin de chaîne avec ^ et $ :D
Enfin, la dernière regex autorise les mots "Bla", "Blabla", "Blablabla" etc... Je me suis servi des parenthèses pour indiquer que "bla" peut être répété 0, 1 ou plusieurs fois.

Ca commence à faire mal à la tête hein ? ^^

Etre plus précis grâce aux accolades



Parfois on aimerait indiquer que la lettre peut être répétée 4 fois, ou de 4 à 6 fois... bref on aimerait être plus précis sur le nombre de fois où ça se répète.
C'est là qu'entrent en jeu les accolades. Vous allez voir, si vous avez compris les derniers exemples ça va vous paraître tout simple.
Il y a 3 façons d'utiliser les accolades :
  • {3} : si on met juste un nombre, cela veut dire que la lettre (ou le groupe de lettres s'il est entre parenthèses) doit être répété 3 fois exactement.
    #a{3}# fonctionne donc pour la chaîne "aaa".
  • {3,5} : ici, on a plusieurs possibilités. On peut avoir la lettre de 3 à 5 fois.
    #a{3,5}# fonctionne pour "aaa", "aaaa", "aaaaa".
  • {3,} : si vous mettez une virgule, mais pas de 2ème nombre, ça veut dire qu'il peut y en avoir jusqu'à l'infini. Ici, cela signifie "3 fois ou plus".
    #a{3,}# fonctionne pour "aaa", "aaaa", "aaaaa", "aaaaaa" etc... (je vais pas tous les écrire ça serait un peu long :lol: )

Si vous faites attention, vous remarquez que :
  • ? correspond à écrire {0,1}
  • + correspond à écrire {1,}
  • * correspond à écrire {0,}

On se fait quelques exemples histoire de se dire qu'on est prêts ? ;)

Chaîne Regex Résultat
eeeee #e{2,}# VRAI
Blablablabla #^Bla(bla){4}$# FAUX
546781 #^[0-9]{6}$# VRAI


Voilà un sacré paquet d'ingurgité dites-moi o_O
Allez, on va s'arrêter là, et faire une bonne pause parce que... Dans le prochain chapitre, on mélange tout ce qu'on vient d'apprendre ! :diable:

Q.C.M.

Quel symbole permet d'indiquer une fin de chaîne ?
Quelle fonction permet de faire une recherche dans une chaîne à l'aide d'une regex PCRE ?
Laquelle de ces regex permettra de reconnaître la chaîne : "Le Site du Zero" ?
Laquelle de ces chaînes sera reconnue par la regex suivante ?
Code : Autre
1
#[0-9]-[e-u]#
Laquelle de ces regex permettra de reconnaître un nombre à 4 chiffres (et 4 chiffres seulement) ?
Je souhaite une regex permettant de reconnaître un nombre compris entre -999 et 999. Peux-tu m'aider ? ^^
Et si je veux un nombre décimal positif inférieur à 1, avec autant de nombres après la virgule qu'on veut ? Par exemple, "0,424059701" ?
Laquelle de ces regex permet de laisser le choix entre plusieurs prénoms ?

Statistiques de réponses au QCM


Je vous ai fait mal à la tête ? :D
C'est tout à fait normal ne vous inquiétez pas (j'aurais dû me faire sponsoriser par une marque d'aspirine moi :lol: ).

Si vous êtes toujours vivant et que vous lisez ces lignes, c'est très bon signe !
Pour le moment les regex ne vous permettent pas encore de faire quelque chose de très utile, mais dans le prochain chapitre on va enfin les utiliser pour du concret.

Prenez votre temps, et ne passez pas au chapitre suivant avant d'être certains d'avoir tout compris et retenu, et d'avoir 20/20 au Q.C.M., sinon vous allez vous planter en beauté :p
Chapitre précédent Sommaire Chapitre suivant

Informations sur le tutoriel

Retour en haut Retour en haut

Créé : Le 19/07/2005 à 23:21:44
Modifié : Le 10/03/2010 à 13:57:20
Avancement : 100%

35 commentaires