[resolu]repetition dun eregi_replace()

repetition dun eregi_replace() [resolu] - PHP - Programmation

Marsh Posté le 29-11-2005 à 23:04:23    

Bonsoir,
 
J'ai beau fouiner... :heink:  
 
Voila j'ai ca..

Code :
  1. $BaliseImg= eregi_replace("\[img([0-9]{1,3})\*([0-9]{1,3})\](.*)\[\/img\]","<img src=\"\\3\" width=\"\\1\" height=\"\\2\" />",$txa_text);


 
Ca marche quand il n'y a qu'une seule balise comme celle-ci dans mon champ

Code :
  1. [img120*120]http://wwwwwwwww.Image.jpg[/img]
  2. Traduit en
  3. <img src="http://images.jpg" width="100" height="100" />


 
Mais si il y a plusieurs balises, il ne prend pas les suivantes genre

Code :
  1. [img150*150]http://images.jpg[/img]
  2. [img100*100]http://images.jgp/[/img]
  3. Ca donne
  4. <img src="http://images.jpg[/img]
  5. <br />[img100*100]http://images.jgp/" width="150" height="150" />


 
J'utilise le meme procedé pour d'autres balises et je n'ai pas ce probleme !
 
Merci :hello:


Message édité par benefred le 30-11-2005 à 21:34:52
Reply

Marsh Posté le 29-11-2005 à 23:04:23   

Reply

Marsh Posté le 30-11-2005 à 00:16:01    

essaye pit etre de remplacer (.*) par
 
(.[^\[]*)
(.[^[]*)
 
pour lui dire de prendre tout sauf "[", sinon il ne sait pas qu'il doit s'arrêter dès qu'il trouve la balise de fin
 
ps: je préviens, je ne suis pas très doué pour ces trucs ;)


Message édité par art_dupond le 30-11-2005 à 00:17:24

---------------
oui oui
Reply

Marsh Posté le 30-11-2005 à 00:28:24    

Utiliser les regex PCRE (preg_replace) au lieux de la version POSIX (ereg_replace) et utiliser l'option U (ungreedy) qui rend les quantificateur * et + non gourmands : la regex ne cherchera pas a trouver le motif le grand possible qui matche le masque de recherche.

Reply

Marsh Posté le 30-11-2005 à 00:33:35    

youp,
 
 
comment on emploie cette option ?
 
(je sais je pourrais chercher mais comme tu en parles :p)


---------------
oui oui
Reply

Marsh Posté le 30-11-2005 à 01:05:37    

Par exemple : $pattern = '#\[img\](.*)\[/img\]#U';

Reply

Marsh Posté le 30-11-2005 à 09:42:58    

ok... boulot oblige.. j'peux pas testé tout de suite.. mais en cherchant plus d'infos sur ungreedy, j'ai trouvé ca
 

Citation :

Les fonctions POSIX eregi(); ou la PCRE preg_match(); ne capture que la première occurence rencontrée dans la chaine. Si l'on veut matcher un texte entier et en retirant toutes les occurences qui correspondent à notre motif, nous devrons employer preg_match_all();
-> voir la fonction ici : preg_match_all


 
Bref... j'vais test le preg_replace
Merci pour les infos ;)

Reply

Marsh Posté le 30-11-2005 à 11:28:27    

yop merci afbilou


---------------
oui oui
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed