Partage
  • Partager sur Facebook
  • Partager sur Twitter

preg_replace_callback

    24 novembre 2005 à 13:27:09

    Salut à tous,

    je souhaiterais avoir une explication sur la fonction preg_replace_callback.

    Je ne vois pas bien comment l'utiliser.

    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      24 novembre 2005 à 13:31:55

      Citation : doc php

      preg_replace_callback
      (PHP 4 >= 4.0.5, PHP 5)

      preg_replace_callback -- Rechercher/remplacer avec une expression rationnelle et fonction de callback
      Description
      mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit [, int &count]] )


      Le comportement de preg_replace_callback() est presque identique à celui de preg_replace(), hormis le fait qu'à la place du paramètre replacement, il faut spécifier une fonction de callback callback qui sera appelée, avec les éléments trouvés en arguments. Cette fonction retourne alors la chaîne de remplacement.



      que veux tu faire avec et pourquoi veux tu l'utiliser
      je sais pas pourquoi mais je sens que dans ton cas un preg_replace voir un str_replace suffirait ...
      • Partager sur Facebook
      • Partager sur Twitter
        24 novembre 2005 à 13:32:32

        le lien vers la doc :p
        Apres il suffit de lire. Si tu ne comprends pas la doc, dis ce que tu ne comprends pas.
        • Partager sur Facebook
        • Partager sur Twitter
          24 novembre 2005 à 13:38:34

          Voila,
          je voudrais transformer ça:

          SelonQue
              $note >= 18 : Ecrire("Félicitation")
              $note >= 16 : Ecrire("Trés bien")
              $note >= 14 : Ecrire("Bien")
          FinSelonQue


          En ça:

          Select
            case $note >= 18
              Ecrire("Félicitation")
            case $note >= 16
              Ecrire("Trés bien")
            case $note >= 14
              Ecrire("Bien")
          EndSelect



          Merci

          Je sais Bison tu me l'a donnée la solution mais sa ne marche pas.
          • Partager sur Facebook
          • Partager sur Twitter
            24 novembre 2005 à 14:17:24

            Autre version, adaptée à ce que je vois comme données :
            <?php
            $str='SelonQue
                var_note >=18 : Ecrire("Félicitations&quot;)
                var_note >=16 : Ecrire("Trés bien&quot;)
                var_note >=14 : Ecrire("Bien&quot;)
                var_note >=12 : Ecrire("Assez bien&quot;)
                var_note >=10 : Ecrire("Passable&quot;)
            FinSelonQue
            '
            ;

            function convertir_case($match)
            {
            $tab=explode('<br />',nl2br($match[1]));
            $retour='Select'."\n\r";
            foreach($tab as $val){
            if(trim($val)!=''){
            $pos=strpos($val,':');
            $retour.='Case '.trim(substr($val,0,($pos-1)))."\n\r";
            $retour.=trim(substr($val,$pos+1))."\n\r";
            }
            }
            $retour.='EndSelect';
            return $retour;
            }
            $str = preg_replace_callback('`SelonQue(.*?)FinSelonQue`s', 'convertir_case', $str);
            echo nl2br($str);
            ?>
            • Partager sur Facebook
            • Partager sur Twitter
              24 novembre 2005 à 15:08:35

              tes délimiteurs ce sont les `?

              j'essai sa ce soir

              Merci
              • Partager sur Facebook
              • Partager sur Twitter
                24 novembre 2005 à 15:11:25

                Citation : Jeremy_61

                tes délimiteurs ce sont les `?


                j'essai sa ce soir

                Merci


                Mes délimiteurs ont toujours été les `

                Les délimiteurs à la M@téo sont une hérésie !!!! ;)
                On soumet l'hérétique à la question et zou... au bûcher. :p
                • Partager sur Facebook
                • Partager sur Twitter
                  24 novembre 2005 à 15:28:48

                  J'ai testé sa marche nickel!

                  Merci Beaucoup!
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 novembre 2005 à 15:59:15

                    Citation : Jeremy_61

                    J'ai testé sa marche nickel!

                    Merci Beaucoup!



                    <mode modeste>
                    Suis une bête... un Bison, normal en somme ! :p
                    </mode modeste>
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 novembre 2005 à 20:25:58

                      Je comprends pas!

                      il n'y a plus que cette parti du code qui marche! tout le reste de mon code ne marche plus correctement.

                      Si je met en commentaire ton code tout remarche!


                      pourrait tu m'expliquer le fonctrionnement de ce que tu ma donné?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 novembre 2005 à 23:45:48

                        Je comprends pas non plus... je ne suis pas devin.

                        Le code que je t'ai donné a été testé sur la partie exemple que tu as fourni.

                        Donc, le test a été fait hors config.

                        Je ne suis pas devant ton écran, ni dans ton script, encore moins dans ta logique de programmation.
                        Donc, sans la moindre info, je ne fais pas de miracle.
                        Des regex, c'est pas de la voyance contrairement à ce que tu pourrais croire.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          26 novembre 2005 à 12:53:40


                          //Parser du SelonQue...FinSelonQue
                          function selonque($match)
                          {
                          $tab=explode('<br />',nl2br($match[1]));
                          $retour='<p>Select'."\n\r";
                          foreach($tab as $val)
                          {
                                  if(trim($val)!='')
                                  {
                                  $pos=strpos($val,':');
                                  $retour.='&nbsp;&nbsp;&nbsp;&nbsp;case '.trim(substr($val,0,($pos-1)))."\n\r";
                                  $retour.=trim(substr($val,$pos+1))."\n\r";
                                  }
                          }
                          $retour.='EndSelect</p>';
                          return $retour;
                          }
                          $Algo = preg_replace_callback('`SelonQue(.*?)FinSelonQue`isU','selonque',$Algo);


                          Voila ce que moi j'ai fait.
                          Je voudrait l'utiliser pour une autre structure plus compliquée.

                          ça:

                          Si a=1 Alors
                          ecrire("blabla")
                          FinSi

                          ou:

                          Si a=1 Alors
                          ecrire("blabla")
                          sinon
                          ecrire("blublu")
                          FinSi
                          • Partager sur Facebook
                          • Partager sur Twitter
                            27 novembre 2005 à 11:34:24

                            Je n'ai pas précisé mais je voudrai avoir en sortie

                            If aaa = 2 Then
                            ecrire("fff")
                            EndIf


                            ou

                            If aaa = 2 Then
                            ecrire("fff")
                            Else
                            ecrire("eee")
                            EndIf
                            • Partager sur Facebook
                            • Partager sur Twitter
                              27 novembre 2005 à 12:04:18

                              Bon, bon...

                              Ecoute, je suis vraiment désolé pour toi, mais il est impenssable de travailler dans de telles conditions.

                              Ce n'est pas possible de te fournir au coup par coup des éléments de regex sur des structures aléatoires sans connaître :
                              - le but du script
                              - les éléments extérieurs
                              - le genre de fichiers à traiter.
                              - les options
                              - les éléments imprévus
                              - les exceptions

                              Bref tout un tas de paramètres qu'il m'est impossible de deviner.
                              Je ne sais pas ce que tu veux faire, ni dans quel contexte.
                              Je ne dispose pas d'une vue d'ensemble du produit à traiter.

                              Bref, le brouillard complet !
                              A partir de ça, tout ce que je pourrais faire ne serait qu'une emplâtre sur une jambe de bois et toute proposition se trouvera hors contexte.

                              Faut arrêter d'assimiler regex et bbcode.
                              On ne fait pas une analyse de texte comme on remplace une bête balise < gras > ou < italique >
                              • Partager sur Facebook
                              • Partager sur Twitter
                                27 novembre 2005 à 13:54:03

                                Ok je comprends ton point de vue!

                                <mon but est de convertir de l'algorithmique (language non executable) en script autoIt v3 qui me permettrait de tester mes scripts que je rends.

                                Voila

                                Je te demande au coup par coup c parsque je recoit les fonctions au coup par coup!

                                Mais je voudrait que tu m'explique en détails comment fonctionne ce que tu ma passé pour que j'essai de me debrouiller moi meme.


                                Merci
                                • Partager sur Facebook
                                • Partager sur Twitter

                                preg_replace_callback

                                × 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