par
carte-sd » 01 mars 2017, 12:26
Salut,
C'est juste une expérimentation faut pas chercher de logique la dedans.
Sinon, c'est normal que la regex donne tous ces résultats puisque les accents ne sont pas pris en compte par preg_replace_callback, donc pour lui, l'accent grave n'est pas considéré comme un mot, donc il capture.
A force de persévérance j'ai trouvé, il suffit d'activer le modifier "u" pour activer le multibytes:
Code : Tout sélectionner
$test = 'Voici des caractères accentués.';
$res = preg_replace_callback('#\b(\w+)\b#u',function($cpt){
return mb_strtoupper($cpt[1],'utf-8');
},$test); // VOICI DES CARACTÈRES ACCENTUÉS.
preg_match_all('#\b(?|\w+)\b#u',$test,$out3);
var_dump($out3);
/* Et là comme tu peux le constater il n'y a que 4 captures:
array (size=1)
0 =>
array (size=4)
0 => string 'Voici' (length=5)
1 => string 'des' (length=3)
2 => string 'caractères' (length=11)
3 => string 'accentués' (length=10) */
Salut,
C'est juste une expérimentation faut pas chercher de logique la dedans.
Sinon, c'est normal que la regex donne tous ces résultats puisque les accents ne sont pas pris en compte par preg_replace_callback, donc pour lui, l'accent grave n'est pas considéré comme un mot, donc il capture.
A force de persévérance j'ai trouvé, il suffit d'activer le modifier "u" pour activer le multibytes:
[code]
$test = 'Voici des caractères accentués.';
$res = preg_replace_callback('#\b(\w+)\b#u',function($cpt){
return mb_strtoupper($cpt[1],'utf-8');
},$test); // VOICI DES CARACTÈRES ACCENTUÉS.
preg_match_all('#\b(?|\w+)\b#u',$test,$out3);
var_dump($out3);
/* Et là comme tu peux le constater il n'y a que 4 captures:
array (size=1)
0 =>
array (size=4)
0 => string 'Voici' (length=5)
1 => string 'des' (length=3)
2 => string 'caractères' (length=11)
3 => string 'accentués' (length=10) */
[/code]