Occi Posté 6 Octobre 2007 Posté 6 Octobre 2007 (modifié) Bonjour, apres une nuit de gallère sur un bout de code je vais finir par manger mon clavier Si un connaisseur d'expressions régulières pouvait m'aider svp. Je cherche à remplacer un [bbcode] par un code html du type <div id="bbcode_1">blabla</div>, jusque là pas de souci. Le problème est que si il y a un 2eme BBcode sur la même page il faut que j'incrémente obligatoirement de cette façon <div id="bbcode_2">blabla 2 eme texte</div>, là c'est la misère totale dans le Regex j'y connais rien. Voici mon code : function bbcode($text){ $text = preg_replace_callback('#\[bbcode\](.*?)\[/bbcode\]#s', 'bbcode_id', $text); return $text;}function bbcode_id($matches){$num_bbcode = count($matches);$str = '';$i = 1;while($i<=$num_bbcode){ $str .= '<div id="bbcode_'.$i++.'">'.$matches[1].'</div>';$i++;} return $str;} Rien à faire au lieu de m'afficher <div avec un bbcode_1 .... <div avec un bbcode_2 etc à la place de mon bbcode_x à incrémenter il me met la boucle sur chaque BBcode :/ Sinon j'ai trouvé et battaillé sur cet exemple mais je n'ai pas eu meilleur résultat : $image="image125.jpg"; function ajoute($masque) { return $masque[1].($masque[2]+1).$masque[3]; } $image=preg_replace_callback('`(\w*?)(\d+)?(\.jpg)`','ajoute',$image); echo $image; En espèrant pouvoir trouver de l'aide sur le Hub ? Bon Week end à tous ... vais me coucher Modifié 6 Octobre 2007 par Occi
tisha_carpenter Posté 7 Octobre 2007 Posté 7 Octobre 2007 preg_replace_callback exécute le code php à chacune des occurences, et non toutes les occurences d'un bloc comme ton code semble être construit. il n'est pas utile de t'intéresser à autre chose que [bbcode] et [/bbcode] qui peut s'écrire #\[/?bbcode\]# s'en plus. pour l'incrémentation en procédural, tu peux utiliser une variable statique dans la fonction bbcode_id, une variable statique est similaire à une variable globale sauf que sa portée est limitée à la fonction et sa définition exécutée qu'une seule fois. sinon preg_replace_callback va bien dans une classe <style type="text/css"> div {display:inline;} #bbcode_1 {color:red;} #bbcode_2 {color:blue;} #bbcode_3 {color:green;} #bbcode_4 {color:magenta;} #bbcode_5 {color:cyan;}</style><?phpfunction bbcode($text){ return preg_replace_callback('#\[/?bbcode\]#', 'bbcode_id', $text);}function bbcode_id($matches){ static $i=0; if(substr($matches[0],1,1)=='/') { // est-ce [/bbcode] ? // alors retourner </div> return '</div>'; } // donc c'est [bbcode] // alors incrémenter $i et retourner <div id="..."> return '<div id="bbcode_'.(++$i).'">';}$contenu='[bbcode]salut[bbcode]et[bbcode]bonjour.[/bbcode][/bbcode][bbcode]ceci est-il valable?[/bbcode][/bbcode][bbcode] j\'espère bien :[[/bbcode]';echo htmlentities($resultat=bbcode($contenu)),'<hr>',$resultat;?>
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant