Modérateur PHPfrance |
2575 Messages
27 juin 2011, 09:56
Le plus (+) signifie : plusieurs occurrences
Le filtre que tu cite est bon : "/[\s']+/" car il est entre guillemets ce qui permet de ne pas mettre \'. Les crochets permettent de lire le OU donc ici on cherche l'espace \s ou bien l'apostrophe ' pouvant exister une ou plusieurs fois (+) on peut aussi utiliser l'étoile * pour 0 à plusieurs fois ou ? (0 à une fois)
Ceci dit, voici un exemple qui transforme directement les débuts de mots en majuscule en utilisant preg_replace_callback()
<pre>
<?php
$chaine = "saint germain l'espinasse";
//Majuscule en début de mot
$chaine2 = preg_replace_callback('/(\w*)/','maj', $chaine);
echo($chaine2);
//fonction callback utilisée par preg_replace_callback()
function maj($matches)
{
// ici $matches[0] contient le mot trouvé
if (isset($matches[0][0])) $matches[0][0]= strtoupper($matches[0][0]); //maj sur le 1° caractère
return $matches[0];
}
?>
</pre>
Le callback dans une recherche par preg_replace_callback() est une opération qui consiste à appeler une fonction à chaque fois que le filtre (pattern) de la regexp est trouvé dans une chaine. Dans notre exemple on cherche tous les mots (\w*) et à chaque mot trouvé la fonction callback nommée "maj" est appelée et le mot trouvé lui est transmis automatiquement par le système dans le paramètre (tableau) $matches et dans la première case n°0 de ce tableau. La fonction maj() est donc programmée pour transformer le début du mot trouvé en majuscule en utilisant la fonction strtoupper(). Ceci est effectué par la commande:
$matches[0][0]= strtoupper($matches[0][0]);
où $matches[0] est un mot trouvé par la recherche regexp et $matches[0][0] désigne le premier caractère de la chaine $matches[0]. Car une chaine se comporte comme un tableau.
--------
//////----
//---
//----
//////
-------
//---
//----
//---
//----
//---
//
------
//////----
//////-----
//////
-----
||--------
||--
||---
||
Prendre le recul n'est pas une perte de temps.
ps:
Affrontez moi dans l'arène