Général
- Présentation
- Les Symboles
- Les Métacaractères
- Les Ancres et Classes
- Les options
- Constantes prédéfinies
- Equivalences
- Créer un motif
- Les POSIX
- Les PCRE
- Les Plus des PCRE
- Les Assertions Part I
- Les Assertions Part II
- Motif conditionnel
- Mysql et les regex
- Url Rewriting
- Optimisation
- Aide mémoire
Les PCRE
Les POSIX
Pratique
Spécial php
- Conseils et Astuces
- Délimiteur PCRE
- Créer une bdd
- Utiliser du BBcode
- Le binaire
- Faire un panier
- Cases à cocher
- Citations imbriquées
- Colorateur syntaxique
- Les list-box ou combo-box
- Faire un diaporama
- Isset ou empty ?
- Une légende au survol
- Site en plusieurs langues
- Requêtes dynamiques
- Gestion des smiley
- Faire un moteur de template
- Timestamp php/mysql
- Timestamp mysql
- Matcher une adresse email
- Controler des données
Les billets de fred
- Les POSIX... mise en pratique !
- Limiter l'accès à un répertoire
- Alternance de couleurs
- Magic_quotes
- Désactiver les short_tags
- Require ou include : Bench
- Cohérence dans les chaines de caractères
- "echo" : lapin ou tortue ?
- Gérer un formulaire avec plusieurs boutons
- Le formulaire a t'il été soumis ?
- J'ai décidé de grossir
- La guerre des étoiles
- La guerre des boutons
- Headers already sent
- IP, IP, IP, houra !
- Créer un itérateur avec PHP5
- On vous conduit vers la lumière
- Comment utiliser MySQL avec PHP
- Non aux booléens !
- Php.ini : dist /recommended
- Include : gouffre ou fêlure ?
- Simple comme les sessions !
- Simplifier le traitement des erreurs
- Structurez vos applications
- Franchement, t'es trop for !
- Notice: Undefined variable (ou index)
- Proscrire les variables auto déclarées
La fonction preg_split (depuis php3)
La syntaxe :
preg_split (motif de chaine, chaine sujet, int limite, options);
preg_split retourne un tableau contenant les sous-chaines de chaine sujet, séparée par les chaines qui vérifient le motif.
Si int limite est fournie, alors les int limite premières sous-chaines sont retrounées.
Euh oui... une explication plus simple peut-être ... un raccourci... une règle à retenir...
preg_split découpe une chaîne en se servant du motif comme séparateur.
PREG_SPLIT_NO_EMPTY
Si cette option est activée, seules les sous-chaînes non vides seront retournées par preg_split
PREG_SPLIT_DELIM_CAPTURE
Si cette option est activée, les expressions entre parenthèses entre les délimiteurs de masques seront aussi capturées et retournées. Cette option a été ajoutée en PHP 4.0.5.
Exemples avec preg_split
Exemple 1
Scinder une chaine de caractères
Niveau de compréhension : facile
<?php
$chaine="Bonjour";
$caracteres=preg_split('//',$chaine,-1,PREG_SPLIT_NO_EMPTY);
print_r($caracteres);
// affichera le tableau avec les éléments
echo "<br/>";
echo $caracteres[0];
// affichera la lettre B
?>
Explication :
Scinde une chaine en autant de caractères qu'elle contient et place les éléments ainsi scinder dans un tableau.
Il suffit ensuite d'appeler les éléments que l'on souhaite afficher.
Regardez dans le cours sur les constantes prédéfinies la fonction de PREG_SPLIT_NO_EMPTY
Exemple 2
Placer des chiffres dans un tableau
Niveau de compréhension : facile
<?php
$chaine=123456;
print_r(preg_split('``',$chaine,-1,PREG_SPLIT_NO_EMPTY));
// En PHP5, on obtiendrait le même résultat avec :
print_r(str_split($chaine));
// Sans PHP5 et sans regex :
print_r(explode(' ',wordwrap($chaine,1,' ',1)));
// le résultat obtenu est :
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
)
?>
Explication :
Exemple 3
Trouver, marquer et mettre en forme des mots dans une chaine
Niveau de compréhension : moyen (un chouette exercice avec preg_split)
<?php
$ch='Les regex php, c\'est sympa, mais on trouve des <a href="regex.php" title="les regex en php">Regex</a> aussi avec mysql. Un exemple, en image <img src="test.gif" alt="une regex en image" />.';
function marque_mot($ch,$mot)
{
$tab=preg_split('`(<\w+.*?>)`',$ch,-1,PREG_SPLIT_DELIM_CAPTURE);
foreach($tab as $key=>$val){
if(preg_match('`^<\w+`',$val))
{
$tab[$key]=$val;
}
else
{
$tab[$key]=preg_replace('`\b'.$mot.'\b`i','<span style="background-color:#ffcc00">$0</span>',$val);
}
}
return implode($tab);
}
$mot_a_trouver='regex';
echo marque_mot($ch,$mot_a_trouver);
?>
Explication :
Cet ensemble de regex (demandée par un internaute sur un forum) permet de mettre en forme (coloriser) des mots trouver dans un texte sans altérer le balisage HTML si d'aventure celui-ci contenait le terme recherché.
On passe la chaine sujet à preg_split() qui, en fonction du masque fourni, éclatera la chaine afin de retourner un tableau en sortie.
Il suffit ensuite de matcher les différents éléments du tableau et de leur appliquer les remplacements voulus.
Vous pourrez trouver cette source dans "Nos regex" ainsi qu'une version améliorée proposée par Julien :
Cf -> Mettre des mots en évidence Version 4
