Soumis par Maxence Delannoy le lun, 08/06/2009 - 11:42
On peut tout faire
Avec les expressions régulières
Même des vers...
Regrouper des caractères
Pour faciliter la lecture d'un numéro de téléphone, d'un numéro SIREN...
function groupChars($text, $groupLength = 3) { while(preg_match('/(\S+)(\S{' . $groupLength . '})/', $text, $matches)) { $text = str_replace($matches[0], $matches[1] . ' ' . $matches[2], $text); } return $text; } echo groupChars('0102030405', 2); // Affiche 01 02 03 04 05 echo groupChars('123456789', 3); // Affiche 123 456 789
Mettre en surbrillance un mot dans une phrase
Utile pour mettre en évidence les termes recherchés dans un résultat de recherche.
function highlight($search, $text) { $words = preg_split('/\s+/', $search); foreach ($words as &$word) { $word = preg_quote($word, '/'); } return preg_replace('/(' . implode($words, '|') . ')/i', '<em>\1</em>', $text); } // Affiche C'est l'<em>esprit</em>, et lui seul, qui nous enchaine ou nous libère. echo highlight('esprit', 'C\'est l\'esprit, et lui seul, qui nous enchaine ou nous libère.'); // Affiche C'est l'esprit, et lui seul, qui <em>nous</em> enchaine ou <em>nous</em> libère. echo highlight('nous', 'C\'est l\'esprit, et lui seul, qui nous enchaine ou nous libère.'); // Affiche C'est l'esprit, et lui seul, qui nous <em>enchaine</em> ou nous <em>libère</em>. echo highlight('enchaine libère', 'C\'est l\'esprit, et lui seul, qui nous enchaine ou nous libère.');
Supprimer les accents
function removeDiacritics($str) { $str = str_ireplace(array('²', '³', '^2', '^3', 'ç', 'œ'), array('2', '3', '2', '3', 'c', 'oe'), $str); return preg_replace(array('/[àáâãäå]/iu', '/[èéêë]/iu', '/[ìíîï]/iu', '/[óôõöø]/iu', '/[ùúûü]/iu'), array('a', 'e', 'i', 'o', 'u'), $str); } echo removeDiacritics('Déjà'); // Affiche deja echo removeDiacritics('œuf'); // Affiche oeuf
Supprimer les espaces multiples et les retours à la ligne
Pour afficher par exemple une adresse sur une seule ligne
$address = "999 rue du Général de Gaulle\n59000 LILLE"; // Affiche 999 rue du Général de Gaulle 59000 LILLE sur une seule ligne echo preg_replace('/\s+/', ' ', $address);
Transformer des URLs en liens
function findLinks($text) { return preg_replace('/(\w+:\/\/[\w\d\.\-\/]+)/', '<a href="$1">$1</a>', $text); } // Affiche L'URL de ce blog : <a href="http://wiip.fr">http://wiip.fr</a> echo findLinks('L\'URL de ce blog : http://wiip.fr');



Très intéressant, un petit
Très intéressant, un petit rappel fait du bien sur les expressions régulières (surtout sur l'utilisation du regsplit). On peut réellement tout faire avec des regexp et une fois que l'on maitrise un minimum on se fait plaisir. Surtout que tous les langages ont leurs moteurs de regexp.
Beaux exemples en effet,
Beaux exemples en effet, merci !
Il y a également de bonnes astuces pour la manipulation de texte avec des regexp dans le TextHelper de CakePHP : http://api.cakephp.org/view_source/text-helper/ ... la plupart sont réutilisables telles quelles.
Pierre
Très bien ce petit
Très bien ce petit rappel.
Une focntionnalité que j'ai utilisé la semaine dernière.
Le remplacement d'un chemin d'une vignette dans un xml par uniquement la vignette.
Plutôt que de parcourir le DOM, j'ai utilisé une fonctionnalité de preg_replace permettant d'avoir du code php
Cela donne ca :
Rapide, un peu dur à relire mais avec un peu de doc ca passe ;)
Très intéressant en
Très intéressant en effet.
Juste pour le groupage de caractères, il existe aussi la fonction wordwrap qui semble AMHA moins "cochon" que ta solution.
Je l'utilise justement pour formatter mes numéros de téléphone, SIRENs, N° SS ....
Issu de la doc PHP :
<?php $text = "Portez ce vieux whisky au juge blond qui fume."; $newtext = wordwrap($text, 20, "<br />\n"); echo $newtext; ?>Affiche
Portez ce vieux
whisky au juge
blond qui fume.
Utiliser wordwrap c'est pas
Utiliser wordwrap c'est pas bête effectivement. Il faut noter que les deux méthodes fonctionnent différemment quand la longueur du texte à formater n'est pas un multiple de la longueur du groupe :
Poster un nouveau commentaire