Partage
  • Partager sur Facebook
  • Partager sur Twitter

regex

Aide sur preg_replace ?!

Sujet résolu
    27 novembre 2005 à 20:16:46

    Bonsoir, petit pb, on ma conseillé tt a l'heure d'utiliser PREG_REPLACE alors je veins de me faire les 2 chapitre concernant les regex (a la va vite je vous l'accorde :p)

    Et j'ai fé ça :
    $msg = preg_replace ('!(.+):code html:(.+):code:!', '$1<textarea  name=\'code\' class=\'html\'>$2</textarea>', $msg);

    Echo $msg;


    Mais doit y avoir un bug parske sa ne marche pas...

    Merci d'avance...
    Bon ap' et bonne soirée :p
    • Partager sur Facebook
    • Partager sur Twitter
      27 novembre 2005 à 20:22:23

      Salut !

      Qu'est-ce qui ne marche pas en fait ? Qu'est-ce qui foire ?
      Je pense déjà que tu devrais modifier ton espace et, à la place, mettre \s (qui symbolise un espace), entre "code" et "html".
      • Partager sur Facebook
      • Partager sur Twitter
        27 novembre 2005 à 21:19:14

        Bonsoir, merci pour \s mais ça ne marche tjs pas, enfait ce script me sert a inserer du html dans un message de forum...

        j'ai un JS qui colorise les lignes de code contenues dans une textarea...

        Je cherche dc a faire que :code html: <code> :code: se transforme en <textarea attrib> <code coloré></textarea>

        J'ai la comande str_replace qui marche, mais etant donné que pour l'affichage du POST j'utilise nl2br() eh bien sa me rajoute <br /> a la fin de chaque ligne dans ma textarea que je colorise par la suite...

        Donc il me faut un preg_replace pour pouvoir applique au code contenu entre :code html: et :code: ($2 ici) un str_replace('<br />', '', $2)

        Qqun peu m'aider ??

        EXEMPLE CONCRET ICI
        • Partager sur Facebook
        • Partager sur Twitter
          27 novembre 2005 à 21:39:23

          Ahhh, ok, eh bien il te faut utiliser preg_replace_callback(); ! :)
          • Partager sur Facebook
          • Partager sur Twitter
            27 novembre 2005 à 21:42:00

            lol, oki, merci bcp !!

            Mais a partir de là, je block, comment puis-je faire pour supprimer juste le text '<br />' dans ma textarea, parske je ne peut pas faire un str_replace dans preg_replace_callback()
            • Partager sur Facebook
            • Partager sur Twitter
              27 novembre 2005 à 21:56:22

              En fait tu dois faire ceci :
              <?php
                     
                      $msg = preg_replace_callback ('!(.+):code\shtml:(.+):code:!' ,
                                                                                                     
                                                                                                      create_function ('$matches' , 'return $matches[1] . \'<textarea  name="code" class="html">\' . str_replace (\'<br />\' , \'\' , $matches[2]) . \'</textarea>\';') ,
                                                                                                     
                                                                                                      $msg);
                     
              ?>
              • Partager sur Facebook
              • Partager sur Twitter
                27 novembre 2005 à 22:05:07

                Merci !
                Mais...
                Humm, je dois avouer que je nage là...

                Sa ne change pas :code html: :code: ? Ai-je fais une erreur ?

                Je te met le code source :


                <?
                If ( isset ($_POST['msg']))
                {
                                $msg = $_POST['msg'];
                        //==================== [code] ====================//
                                                // -- Suppression de < pour &lt;
                                $msg = str_replace ('<', '&lt;', $msg);
                                                // -- Suppression de > pour &rt;
                                $msg = str_replace ('>', '&gt;', $msg);     
                                                // -- textarea > HTML
                                //$msg = str_replace (':code html:', '<textarea name="code" class="html">', $msg);
                                                // -- textarea > PHP
                                //$msg = str_replace (':code php:', '<textarea name="code" class="php">', $msg);
                                                // -- textarea > JS
                                //$msg = str_replace (':code js:', '<textarea name="code" class="javascript">', $msg);
                                                // -- Fermeture de textarea
                                //$msg = str_replace (':code:', '</textarea>', $msg);
                        //==================== [code] ====================//

                        //=================== smilouze ===================//
                                $msg = str_replace (':lol:', '<img src="mdr.gif">', $msg);
                                $msg = str_replace (':diable:', '<img src="diable.gif">', $msg);
                                $msg = str_replace (':kdo:', '<img src="kdo.gif">', $msg);
                        //=================== smilouze ===================//

                        //================= Saut de lignes ================//
                        $msg = nl2br ($msg);
                        //================= Saut de lignes ================//

                        //==================== [code] ====================//
                        $msg = preg_replace_callback ('!(.+):code html:(.+):code:!' ,
                        create_function ('$matches' , 'return $matches[1] . \'<textarea  name="code" class="html">\' . str_replace (\'<br />\' , \'\' , $matches[2]) . \'</textarea>\';') , $msg);       
                        //==================== [code] ====================//
                Echo $msg;
                }
                ?>


                <hr>
                Pour le code :<br>
                <form method="post">
                <textarea rows="10" cols="60" name="msg">
                KIOU
                :code html:
                        <frameset rows="*" framespacing="0" border="0" frameborder="0">
                        <frame name="conteneur" src="accueil.htm">
                        <noframes>
                        <body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0">

                        <p>Cette page utilise des cadres, mais votre navigateur ne les prend pas en
                        charge.<br>
                        Utilisez <a href="http://barbarius.com/accueil.htm" target="_blank">cette adresse</a>.<br>Désolé pour le
                        désagrément...</p>

                        </body>
                        </noframes>
                        </frameset>
                :code:
                </textarea><br>
                <input type="submit" value=" OK ">
                </form>
                </p>


                Comme tu peut le voir j'ai fais bcp de test pour essayer d'arriver au resultat escompté mais rein a faire...

                Peut-etre prendra tu le temps de lire mon code...
                Ou pas :p

                Merci d'avance..
                • Partager sur Facebook
                • Partager sur Twitter
                  27 novembre 2005 à 22:45:59

                  Déjà, n'oublie pas le \s, ça peut jouer ! Ensuite, n'oublie pas les flags i (pas de casse), U (non gourmand) et s (. = tous caractères, y compris \n) dans ton expression :
                  '!(.+):code\shtml:(.+):code:!isU'

                  Après, si ça ne marche pas, ça peut venir de mes $matches[1] et $matches[2], pour te dire la vérité en général je met un peu au pif lol, mais je pense que j'ai quand même bien choisi, y a pas de raison ^^
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 novembre 2005 à 16:48:44

                    Genial !! Ca marche :p



                    Héhé ! J'adore l'ambience de ce forum et la rapidité des reponeses !
                    (je ne charie pas, c'est la verité !!)

                    Skybattle je ne sais pas comment te remercier !!

                    !(.+):code html:(.+):code:!isU...


                    Je n'y aurais jamais pensé !!

                    Trois petites lettres !!!

                    Je remercie tous ceux qui on prit le temps de me repondre !!

                    A charge de revanche...

                    Grace a vous tous ça marche !!

                    Avis aqqu'un qui veut utiliser ce code, la version des posts ci dessus n'est pas complete, du moins pas optimisé :p, demandez moi et je vous filerais le bon !
                    Encore MERCI !!
                    • Partager sur Facebook
                    • Partager sur Twitter

                    regex

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown