preg_replace(): Ersetzen von Variablen / TemplateKlasse

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • preg_replace(): Ersetzen von Variablen / TemplateKlasse

    Hi Profis.

    Stehe hier vor folgendem Problem:


    Schreibe mir gerade eine TemplateKlasse und will in meinem String aus dem Template die Variablen durch deren Werte ersetzen lassen.

    Mit str_replace() funktioniert das zwar schon ganz gut, aber wenn ich folgenden Fall habe:

    Hallo $variable, schön dass $variable_x hier bist.


    Angenommen:

    $variable = "Martin";
    $variable_x = "Du";


    Dann ersetzt er mir Variable $variable durch Martin.

    Bei der Variable $variable_x passiert dann logischerweise das:

    Du_x

    Er ersetzt ja wenn er $variable ersetzt alle Vorkommen im String.
    Und da $variable auch in $variable_x vorkommt ersetzt er das auch.

    Müsste Quasi preg_replace nehmen und das so biegen, dass ich das Ende der Variablen festlege als Suchmuster.

    Ende der Variablen im Template wäre Leerzeichen bzw Anführungszeichen.

    Habe das jetzt schon probiert, aber ich verzweifle total:

    PHP-Code:

    preg_replace
    ([/$suchmuster]+([\'"'|''$])/,$ersetzung,$template); 
    Das deutsche Tutoriel hier hat mir auch noch nicht geholfen.

  • #2
    nimm doch im Template einfach {...} für Variablen.

    Kommentar


    • #3
      ja neee.

      will ich aber nich unbedingt, da der Designer dann wieder verwirrt ist.

      Is klar ne Möglichkeit, aber die gefällt mir halt nicht.

      Kommentar


      • #4
        Re: preg_replace(): Ersetzen von Variablen / TemplateKlasse

        Müsste Quasi preg_replace nehmen und das so biegen, dass ich das Ende der Variablen festlege als Suchmuster.
        mittels der assertion \b kannst du festlegen, daß sich an dieser stelle eine wortgrenze befindet

        mal ein beispiel:
        http://pcre.nophia.de/evaluate/0c2ed...dex.php#output

        im vergleich dazu, ohne assertion:
        http://pcre.nophia.de/evaluate/b8407...dex.php#output
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          Ajoa. Die Idee hört sich gut an, nur leider ersetzt er eigentlich gar keine variable mehr.

          PHP-Code:
          $template preg_replace('/\b('.$this->varcache[$i].')\b/',$this->valuecache[$i],$template); 

          Sobald da ein $ Zeichen im Spiel ist ersetzt er mir nix mehr. Wie verflucht dieses $ doch ist.


          EDIT:
          Galub ich dreh noch durch. Langsam wird die Klasse wirr!!!
          Zuletzt geändert von Shock2k; 15.04.2005, 22:34.

          Kommentar


          • #6
            Kein Wunder, du verwendest ja auch gar keine Assertion, wie es dir vorgeschlagen wurde. Lies hier und schau dir die beiden Beispiel von derHund nochmal an!

            (Heißt es "von derHund" oder "vom Hund"? )

            Kommentar


            • #7
              Sobald da ein $ Zeichen im Spiel ist ersetzt er mir nix mehr. Wie verflucht dieses $ doch ist.
              dann laß dir doch erst mal das generierte pattern ausgeben, um zu sehen, ...
              Kein Wunder, du verwendest ja auch gar keine Assertion,
              meinst du, weil dort nur b steht? das forum verschluckt innerhalb der php-tags die \ ...
              Heißt es "von derHund" oder "vom Hund"
              ganz wie du möchtest. ich persönlich bevorzuge 'vom hund', die andere version klingt so distanziert
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                $template = preg_replace('/\b'.$this->varcache[$i].'\b/',$this->valuecache[$i],$template);

                Ich hab mir jetzt erstma ausgeben lassen was im Suchstring steht und durch was es ersetzt werden soll:

                $nav_left_w -> 18%
                $content_w -> 82%
                $nav_right_w -> 0%
                $nav_top_h -> 0px
                $nav_bottom_h -> 0px
                $site_banner -> banner
                $nav_top -> top
                $nav_bottom -> bottom
                $redirect[code] -> redirect

                Also nehm ich doch an dass mein Pattern dann so aussehen tut:

                '/\b'.$nav_left_w.'\b/'
                Daraus folgt:

                $template = preg_replace('/\b'.$nav_left_w.'\b/',18%,$template);

                Diese Variablen die dann im Suchstring stehen, gibts im Template auch wirklich falls jetzt die Frage aufkommt. *gg*

                Kommentar


                • #9
                  Re: preg_replace(): Ersetzen von Variablen / TemplateKlasse

                  Original geschrieben von Shock2k

                  Dann ersetzt er mir Variable $variable durch Martin.

                  Bei der Variable $variable_x passiert dann logischerweise das:

                  Du_x

                  Er ersetzt ja wenn er $variable ersetzt alle Vorkommen im String.
                  Und da $variable auch in $variable_x vorkommt ersetzt er das auch.
                  Versteh ich das richtig? Wenn ja, könntest du doch einfach zuerst alle $variable_x ersetzen und dann $variable...
                  oder hab ich das falsch verstanden?
                  MfG
                  aim
                  Lies mich jetzt!
                  - OT-Tags-Liebhaber und BB-Code-Einrücker -

                  Kommentar


                  • #10
                    ähm....Wär ne Möglichkeit, aber pfuschen wollt ich eigentlich nicht. *gg*

                    Soll schon ne saubere und 100%ige Lösung sein.

                    Kommentar


                    • #11
                      was bitte is daran unsauber?!
                      MfG
                      aim
                      Lies mich jetzt!
                      - OT-Tags-Liebhaber und BB-Code-Einrücker -

                      Kommentar


                      • #12
                        Weils die möglichkeit gibt, dass wenn die Vars eben in der falschen reihenfolge kommen, dass es dann net funzt.

                        Und da es diese Möglichkeit gibt ist es unsauber.

                        Sin mer hier bei Microschrott oder was???? So auf die Art "Naja, wenn des net passiert und des net passiert dann gehts so halbwegs."

                        Kommentar


                        • #13
                          hmm,

                          ich verstehe dein problem nicht ...

                          nimm die \b-lösung und gut. funktionierts oder wie oder was?
                          wenn du eine tpl-interne variable mittels $ am anfang kennzeichnest, muß du ' verwenden oder escapen.

                          ich weiß aber eigentlich garnicht genau, wo dein problem ist. irgendwie hast du es nocht nicht geschildert.

                          OffTopic:
                          du solltest dir eventuell mal eine hommingberger gepardenforelle genehmigen, ...

                          ich weiß, wo du die günstig bekommst
                          Die Zeit hat ihre Kinder längst gefressen

                          Kommentar


                          • #14
                            Original geschrieben von derHund
                            du solltest dir eventuell mal eine hommingberger gepardenforelle genehmigen, ...
                            OffTopic:
                            noch so einer ... nein, ICH tu es nicht tun

                            btw: signaturlinks werden afaik nicht gespidert bzw. archiviert
                            Kissolino.com

                            Kommentar


                            • #15
                              btw: signaturlinks werden afaik nicht gespidert bzw. archiviert
                              wie meinst du das genau?
                              http://search.msn.de/results.aspx?q=...elle.nophia.de

                              OffTopic:
                              auch wenn die links aus seo-sicht nix bringen, ich werde bei dem wettbewerb eh keine lorbeer ernten.

                              wie bringe ich btw go-ogle dazu, site:www.php-resource.de link:gepardenforelle.nophia.de zu suchen?
                              Die Zeit hat ihre Kinder längst gefressen

                              Kommentar

                              Lädt...
                              X