preg_replace et limite | help me and get a free cookie [php] - PHP - Programmation
Marsh Posté le 20-12-2004 à 13:27:23
Je me pose la même question (parsing de smilies) et je n'ai pas réussi à trouver de solution simple ...
Marsh Posté le 20-12-2004 à 13:36:01
oui moi aussi c'est dans le cadre de la limitation de smileys
Marsh Posté le 20-12-2004 à 13:43:23
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..
Marsh Posté le 20-12-2004 à 13:52:56
je ne comprends pas le problème ... Ca marche pas comme c'est dit plus haut ?
Marsh Posté le 20-12-2004 à 14:05:57
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 "
Marsh Posté le 20-12-2004 à 14:07:17
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 !
Marsh Posté le 27-12-2004 à 15:08:49
j'ai tjrs pas résolu le probleme
qqun aurait-il une solution ?
(ceci est un up)
Marsh Posté le 27-12-2004 à 19:52:56
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...
Marsh Posté le 27-12-2004 à 20:05:58
merci pour ta réponse en tout cas
voila pour toi :
Marsh Posté le 27-12-2004 à 20:25:08
Réserves-en un autre, j'ai peut-être trouvé une solution viable, il me faut juste quelques minutes.
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.
Marsh Posté le 27-12-2004 à 21:15:27
c'est pas grave, c'est deja mieux que rien !!
si tu me donnes ta solution t'as un cookie encore plus gros
Marsh Posté le 27-12-2004 à 22:24:39
Code :
|
Marsh Posté le 26-05-2005 à 14:05:39
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.
Marsh Posté le 27-05-2005 à 09:02:33
Hmmm ...
Peut être que l'on peut voir cela suivant une fonction modifiée (utilisation d'une table smilies pour être précis).
Marsh Posté le 25-06-2005 à 09:32:18
J'avais perdu de vue ce topic.
Je viens de me creuser la tête quelques minutes et je pense avoir trouvé une idée qui fonctionne :
Code :
|
Y'a probablement beaucoup mieux/optimisé (surtout moins bidouille), mais en attendant ça a l'air de marcher pas trop mal.
Marsh Posté le 20-12-2004 à 13:14:07
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