On peut tout faire
Avec les expressions régulières
Même des vers...
Pour faciliter la lecture d'un numéro de téléphone, d'un numéro SIREN...
<?php
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
?>
Utile pour mettre en évidence les termes recherchés dans un résultat de recherche.
<?php
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.');
?>
<?php
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
?>
Pour afficher par exemple une adresse sur une seule ligne
<?php
$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);
?>
<?php
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');
?>
Comments
Apen (not verified)
Mon, 08/06/2009 - 14:26
Permalink
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.
Pierre MARTIN (not verified)
Mon, 08/06/2009 - 17:44
Permalink
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
Pierre (not verified)
Tue, 09/06/2009 - 12:36
Permalink
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 :
$pattern = "/(.*)<\/vignette>/emisU";
$replace = "''.basename('\\1').''"
preg_replace($pattern,$replace,$xml);
Rapide, un peu dur à relire mais avec un peu de doc ca passe ;)
Anthariel (not verified)
Tue, 09/06/2009 - 17:15
Permalink
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, "\n");
echo $newtext;
?>
Affiche
Portez ce vieux
whisky au juge
blond qui fume.
Maxence
Wed, 10/06/2009 - 09:30
Permalink
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 :
echo groupChars('1234567'); // Affiche 1 234 567
echo wordwrap('1234567', 3, ' ', true); // Affiche 123 456 7
Add new comment