Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1470 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [php]preg_replace et limite | help me and get a free cookie

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[php]preg_replace et limite | help me and get a free cookie

n°927995
glabibou
Posté le 20-12-2004 à 13:14:07  profilanswer
 

bonjour , voici mon probleme : (lu sur php.net)
 

It is useful to note that the 'limit' parameter, when used with 'pattern' and 'replace' which are arrays, applies to each individual pattern in the patterns array, and not the entire array.
<?php
 
$pattern = array('/one/', '/two/');
$replace = array('uno', 'dos');
$subject = "test one, one two, one two three";
 
echo preg_replace($pattern, $replace, $subject, 1);
?>
 
If limit were applied to the whole array (which it isn't), it would return:
test uno, one two, one two three
 
However, in reality this will actually return:
test uno, one dos, one two three


 
 
je voudrais que :

it would return:
test uno, one two, one two three


 
comment faire ?
merci de votre aide , et pas d'insultes plz :(


Message édité par glabibou le 27-12-2004 à 15:12:57
mood
Publicité
Posté le 20-12-2004 à 13:14:07  profilanswer
 

n°928000
Gilbert Go​sseyn
Dr Liara T'Soni
Posté le 20-12-2004 à 13:27:23  profilanswer
 

Je me pose la même question (parsing de smilies) et je n'ai pas réussi à trouver de solution simple ...


---------------
Tant que la couleur de la peau sera plus importante que celle des yeux, nous ne connaitrons pas la paix. ● L'écriture, c'est la mémoire du futur. ● Mods FO4
n°928008
glabibou
Posté le 20-12-2004 à 13:36:01  profilanswer
 

oui moi aussi c'est dans le cadre de la limitation de smileys

n°928023
glabibou
Posté le 20-12-2004 à 13:43:23  profilanswer
 

je pourrais faire un str_replace , compter le nombre d'occurences de smileys, mais ensuite ?
je vais quand meme pas effacer tous les messages qui ont plus de 4 smileys par exemple, faut que je lui dise de pas remplacer au dessus de 4 smileys..
hum.. comment faire..

n°928034
bob007
Posté le 20-12-2004 à 13:52:56  profilanswer
 

je ne comprends pas le problème ... Ca marche pas comme c'est dit plus haut ?

n°928054
glabibou
Posté le 20-12-2004 à 14:05:57  profilanswer
 

bah moi je veux que ca retourne "test uno, one two, one two three" a la place de "test uno, one dos, one two three "

n°928056
glabibou
Posté le 20-12-2004 à 14:07:17  profilanswer
 

en fait j'ai deux tableaux : un avec les codes des smileys et lautre avec l'url des smileys, je voudrais limiter le nombre de smileys a 4 par exemple.
si je mets
preg_replace($pattern, $replace, $subject, 4);  
lutilisateur pourra mettre au maximum 4 fois le meme smiley, mais si j'ai une liste de 12 smiley il pourra en mettre 48 ! alors que moi je veux 4 au maximum !

n°932530
glabibou
Posté le 27-12-2004 à 15:08:49  profilanswer
 

j'ai tjrs pas résolu le probleme :(
qqun aurait-il une solution ?
(ceci est un up)

n°932698
sielfried
Posté le 27-12-2004 à 19:52:56  profilanswer
 

Bonne question en effet...
 
Si preg_replace au moins renvoyait le nombre de remplacements qu'il a effectivement faits, comme str_replace, alors il serait possible de se faire sa version de la fonction (en chaînant des appels pour chaque smiley, ce qui ne serait peut-être pas optimal cela dit).
 
Mais là, comme ça, je vois pas. J'ai fait une rapide recherche sur Google et je n'ai rien trouvé, ce qui me paraît assez étonnant... [:figti]


Message édité par sielfried le 27-12-2004 à 19:53:18

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°932700
glabibou
Posté le 27-12-2004 à 20:05:58  profilanswer
 

merci pour ta réponse en tout cas :)
voila pour toi :
http://www.creativetheatre.org/images/cookie.jpg


Message édité par glabibou le 27-12-2004 à 20:13:19
mood
Publicité
Posté le 27-12-2004 à 20:05:58  profilanswer
 

n°932702
sielfried
Posté le 27-12-2004 à 20:25:08  profilanswer
 

:love:
 
Réserves-en un autre, j'ai peut-être trouvé une solution viable, il me faut juste quelques minutes. :d
 
Edit: en fait j'ai trouvé une alternative, mais elle impose une "priorité" aux masques (smilies) : s'il y'a ": ) : ) : d : )" et une limite de 3, on va obtenir ":) :) : d :)" (si ": )" se trouve avant le ": d" dans le tableau). Ce qui n'est pas génial. :/


Message édité par sielfried le 27-12-2004 à 20:52:33

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°932723
glabibou
Posté le 27-12-2004 à 21:15:27  profilanswer
 

c'est pas grave, c'est deja mieux que rien !!
si tu me donnes ta solution t'as un cookie encore plus gros :)

n°932748
sielfried
Posté le 27-12-2004 à 22:24:39  profilanswer
 

Code :
  1. function preg_replace_alt($pattern, $replace, $subject, $limit) {
  2. if (!is_array($pattern) || !is_array($replace)) {
  3.  return preg_replace($pattern, $replace, $subject, $limit);
  4. }
  5. $nb_masques = count($pattern);
  6. for ($i = 0; $i < $nb_masques && $limit > 0; $i++) {
  7.  $nb_rempl = preg_match_all($pattern[$i], $subject, $dummy);
  8.  $subject = preg_replace($pattern[$i], $replace[$i], $subject, $limit);
  9.  $limit -= $nb_rempl;
  10. }
  11. return $subject;
  12. }


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1097985
Gilbert Go​sseyn
Dr Liara T'Soni
Posté le 26-05-2005 à 14:05:39  profilanswer
 

Hmmm en lisant le bout de code au dessus ça me parait clair (on décrémente au fur et à mesure le nb de parsing restant en fait). A voir et à tester.


---------------
Tant que la couleur de la peau sera plus importante que celle des yeux, nous ne connaitrons pas la paix. ● L'écriture, c'est la mémoire du futur. ● Mods FO4
n°1099026
Gilbert Go​sseyn
Dr Liara T'Soni
Posté le 27-05-2005 à 09:02:33  profilanswer
 

Hmmm ...
 
Peut être que l'on peut voir cela suivant une fonction modifiée (utilisation d'une table smilies pour être précis).


---------------
Tant que la couleur de la peau sera plus importante que celle des yeux, nous ne connaitrons pas la paix. ● L'écriture, c'est la mémoire du futur. ● Mods FO4
n°1130587
sielfried
Posté le 25-06-2005 à 09:32:18  profilanswer
 

J'avais perdu de vue ce topic. :D
 
Je viens de me creuser la tête quelques minutes et je pense avoir trouvé une idée qui fonctionne :
 

Code :
  1. function preg_replace_alt_v2($pattern, $replace, $subject, $limit) {
  2.    // Si l'un des deux premiers arg. n'est pas un tableau, utiliser la fonction par défaut
  3.    if (!is_array($pattern) || !is_array($replace)) {
  4.     return preg_replace($pattern, $replace, $subject, $limit);
  5.    }
  6.  
  7.    // Si le tableau des patterns et celui des remplacements ne font pas la même taille, erreur
  8.    $pattern_cnt = count($pattern);
  9.    $replace_cnt = count($replace);
  10.    if ($pattern_cnt != $replace_cnt) {
  11.       trigger_error("preg_replace_alt_v2 : les tableaux 'pattern' et 'replace' doivent faire la même taille.", E_USER_ERROR);
  12.    }
  13.  
  14.    // Création du masque pour preg_split : concaténation de tous les masques
  15.    $masque = substr($pattern[0], 1, -1);
  16.    for ($i = 1; $i < $pattern_cnt; $i++) {
  17.       $masque .= '|' . substr($pattern[$i], 1, -1);
  18.    }
  19.    $masque = '#(' . $masque . ')#';
  20.    // Adaptation de la limite demandée à preg_split avec PREG_SPLIT_DELIM_CAPTURE
  21.    $limit *= 2;
  22.    // Découpage de la chaîne en fonction de la limite demandée
  23.    $tab = preg_split($masque, $subject, $limit, PREG_SPLIT_DELIM_CAPTURE);
  24.    // Les cases impaires contiennent les éléments à remplacer
  25.    $tab_cnt = count($tab);
  26.    $imax = ($limit < $tab_cnt) ? $limit : $tab_cnt;
  27.    for ($i = 1; $i < $imax; $i += 2) {
  28.       $tab[$i] = preg_replace($pattern, $replace, $tab[$i]);
  29.    }
  30.    // On retourne la concaténation de tous les éléments du tableau
  31.    return implode('', $tab);
  32. }


 
Y'a probablement beaucoup mieux/optimisé (surtout moins bidouille), mais en attendant ça a l'air de marcher pas trop mal. ;)


Message édité par sielfried le 25-06-2005 à 09:42:51

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [php]preg_replace et limite | help me and get a free cookie

 

Sujets relatifs
quota ftp freePro*c/c++ Help !!!
[PHP] cookie + IE6 (P3P) à l'aide !!!Help
HELPExec() + free
Bug de sessions avec freeArgument depuis constructeur dans limite tableau
Envoi de mail en html... Free me change des balises ![HELP] utilisation ID et IDREF
Plus de sujets relatifs à : [php]preg_replace et limite | help me and get a free cookie


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR