utiliser preg_split

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : utiliser preg_split

Re: utiliser preg_split

par whombat » 27 juin 2011, 10:23

Merci encore une fois pour la réponse.

C'est très clair et j'ai tout compris. Il y a un hic (il me semble, je n'ai pas testé, je réponds d'abord) c'est dans le cas de l'Espinasse, il va mettre L'Espinasse, cad une majuscule au 'l', mais je vais voir ça et trouver la parade, au cas où...

De toutes façons, merci encore. C'était très sympa de votre part.

Cordialement.

Re: utiliser preg_split

par sadeq » 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.

Re: utiliser preg_split

par whombat » 27 juin 2011, 09:28

Merci pour la réponse rapide.

J'avais trouvé ça sur ManuelPHP : $keywords = preg_split("/[\s']+/", $text); mais je ne sais pas à quoi correspond le '+'. Vous aurriez une idée ?

Re: utiliser preg_split

par sadeq » 27 juin 2011, 09:20

Bonjour, c'est simple tu dois écrire comme ça:
<pre>
<?php
$chaine ="saint germain l'espinasse";
$chaine = preg_split('/\'|\s/', $chaine);
print_r($chaine);
?>
</pre>
Le caractère | (pipe) dans le filtre de la regexp se lit : OU

utiliser preg_split

par whombat » 27 juin 2011, 08:38

Bonjour à tous,

Pour pouvoir scinder le nom de ma ville et mettre des majuscules à la première lettre du mot, ('Saint Germain l'Espinasse) j'ai tenté, pour commencer, d'utiliser preg_split qui devrait mes séparer les mots en fonction de l'apostrophe ou de l'espace... Et bien non, je n'y arrive pas.

$chaine = 'saint germain l'espinasse';
$chaine = preg_split('/[\'][\s]/', $chaine);

Quelqu'un pourrait-il m'aider ? Merci d'avance.