Le "TutoDeb" sur Expreg.com - Section 2
---> TutoDeb Section 3
TutoDeb Section 1 <---
Les regex... en exemples,
par la pratique !
Je suis une banane en regex, une vraie bille, bref j'y connais que dalle... faut qu'on m'aide là !
On continue sur le même principe avec notre recherche suivie d'une condition pour vérifier.
Dans cette section, on va vraiment commencer à utiliser les regex en travaillant avec notre série de symboles et en utilisant les classes de caractères [0-9] et [a-z]
>>> cf-> tuto : Les symboles - point N°5
Une regex + classes de caractères pour vérifier une chaine chiffrée !
1) PREG_MATCH + classe de caractères [0-9]
Motif avec classe de caractères :
<?php
$chaine='1515';
if(preg_match('`[0-9]`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
?>
Résultat :
La condition affichera :
VRAI
Explication :
Je viens d'utiliser dans le motif la classe de caractères [0-9]
Avec cette classe, on demande simplement à la regex de vérifier que la chaine contient au moins un chiffre, peu importe lequel.
Recopiez cet exemple sur un page et testez en changeant la classe de caractères pour [a-z], la condition affichera FAUX.
============================================
2) PREG_MATCH + classe [0-9] + ancrage début de chaine ^
Motif avec classe de caractères + ancrage de début de chaine (le ^) :
<?php
$chaine='1515';
if(preg_match('`^[0-9]`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
?>
Résultat :
La condition affichera :
VRAI
Explication :
En ajoutant simplement le ^ devant ma classe de caractères, je demande au moteur d'expressions régulières de chercher si la chaine débute bien par un chiffre.
Voir la signification du symbole ^ sur cette page :
>>> Les symboles
============================================
3) PREG_MATCH + classe [0-9] + ancrage de fin de chaine $
Motif avec classe de caractères + ancrage de fin de chaine (le $) :
<?php
$chaine='1515';
if(preg_match('`[0-9]$`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
?>
Résultat :
La condition affichera :
VRAI
Explication :
Comme pour l'exemple précédent, en mettant le $ après la classe, je demande au moteur d'expressions régulières de chercher si la chaine se termine par un chiffre.
Voir la signification du symbole $ sur cette page :
>>> Les symboles
============================================
4) PREG_MATCH + classe [0-9] + ancrage de début ^ et fin de chaine $
Motif avec classe de caractères + ancrage de début et fin de chaine (les ^ $) :
<?php
$chaine='1515';
if(preg_match('`^[0-9]$`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
?>
Résultat :
La condition affichera :
FAUX
Explication :
Faux ???? Mince alors !
Mais pourquoi, ma chaine commence bien par un chiffre et se termine aussi par un chiffre !!!
Oui en effet, mais la chaine contient plus d'un chiffre, on va donc devoir commencer à utiliser les quantificateurs tels que * + ? et les intervalles de reconnaissance {1}, {1,3} etc...
Que se passe t'il réellement dans le moteur d'expressions régulières ?
En fait, sans mettre de quantificateurs, le moteur cherche une chaine qui commence et qui se termine par un seul et unique chiffre ! Soit une chaine du genre : 1 ou 5 ou 8.
Pour que notre condition soit
VRAI, il faut simplement ajouter un quantificateur * ou + dans le motif de la regex, comme ceci :
'`^[0-9]+$`'
Faites le test maintenant et vous verez que la condition va retourner
VRAI
Rappel : Voir la signification des symboles ^ et $ ainsi que * et + sur cette page :
>>> Les symboles
============================================
5) PREG_MATCH + classe [a-z] + ancrage de début ^ et fin de chaine $
Dans cet exemple, on va mettre directement en pratique ce qu'on vient de voir.
On va tester un pseudo !
Vérifier un pseudo : classe de caractères + ancrage début et fin de chaine (les ^ $) :
<?php
$chaine='banane';
if(preg_match('`^[a-z]+$`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
?>
Résultat :
La condition affichera :
VRAI
Explication :
Simple, notre chaine est bien composée de caractères alphabétiques compris entre a et z.
Que se passerait-il si j'avais une majuscule dans mon pseudo ?
<?php
$chaine='Banane';
if(preg_match('`^[a-z]+$`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
?>
Faites le test maintenant et vous verez que la condition va retourner
FAUX
Ah mince alors, ça ne fonctionne plus !
Pas de panique, c'est pas grave ! Si vous vous souvenez du début de ce tuto, sur la page d'accueil, je vous ai parlé des options des PCRE.
C'est ici quelles vont entrer en action !
La plus simple de toute, la plus facile à retenir et celle dont on a besoin ici est l'option
i, pour
insensible à la casse
Vous vous rappelez également lorsque je vous ai parlé des délimiteurs et des options...
On va appliquer :
<?php
$chaine='Banane';
// On pourrait le faire comme ceci avec une classe plus longue [a-zA-Z]
//
if(preg_match('`^[a-zA-Z]+$`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
//
//--- Exemple 2, avec la classe normale [a-z] et l'option i
//
if(preg_match('`^[a-z]+$`i',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
?>
Vous avez vu, avec le second exemple le i a été ajouté après le délimiteur ` ?
Et voilà, notre condition affiche maintenant VRAI pour les deux tests
C'est identiquement la même chose avec la classe [a-zA-Z] sans le i.
Rappel : Voir la signification des symboles ^ et $ ainsi que * et + sur cette page :
>>> Les symboles
============================================
Voilà, cette partie n'a été beaucoup plus compliquée que la première, mais la suite va venir.
Résumé :
- Vous avez appris à utiliser une classe de caractères [0-9] ou [a-z] ou [a-zA-Z]
- Vous avez revu l'emploi des ancrages de début ^ et de fin de chaine $.
- Vous avez découvert l'emploi des quantificateurs * + ?
- Vous avez découvert l'emploi d'une première option le i
---> TutoDeb Section 3
TutoDeb Section 1 <---
Rédaction Yves Maistriaux :: décembre 2005