RegEx: Signalwörter finden

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

  • RegEx: Signalwörter finden

    Ich bastle grade einen Templatepraser für mein CMS. Der funktioniert zur Zeit fast gut. Es gibt noch Probleme mit Schleifen. Da man bei str_replace kein Limit setzten kann, wir für jeden Durchlau der Schleife das Signalwort durch das erste Elment im Ersetzten-Array ersetzt.
    Deshalb will ich auf preg_replace umsteigen, aber ich weiß nicht, wie der Suchstring dafür heißen muss.
    Im Template kommen Signalwörter wie zum Beispiel '$username' (KEINE VARIABLE) vor. Der Suchstring soll im Template nach '$username' suchen.

    Wer kann mir helfen?
    thx

    fRaNkNsTeIn

  • #2
    Suchst Du sowas:
    preg_replace('/ \$username /'," MyUSERNAME ",$str);
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Ja
      Aber es geht nicht!
      Ich poste mal den Code der Funktion:
      PHP-Code:
      function template($template$suche$ersetze$endung='.htm'$templatebin='templates/')
      {
          global 
      $cache;
          
      //print filesize($templatebin.$template.$endung);
          
      if(!isset($cache[$template]))
          {
              
      $fp=fopen($templatebin.$template.$endung'r');
              
      $inhalt=fread($fpfilesize($templatebin.$template.$endung));
              
      $cache[$template]= $inhalt;                                 //Ok
          
      }
         
      $suche=addslashes($suche);
         
      $cache[$template]=preg_replace("/ \$suche /"$ersetze$cache[$template]);
          return 
      $cache[$template];


      Zum Prasen des Templates:
      template('index', '$username', $user['name']);

      Kommentar


      • #4
        Ja dann schau mal mein preg_replace hat einfach ' Deins doppelte " das is ein kleiner netter Unterschied...
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          So würde $suche ersetzt werden, aber $suche ist in diesem Fall eine echte Variable! Sie enthält je nach dem wo die Funktion aufgerufen wird, ein String wie z.B. $username.

          Kommentar


          • #6
            Hähhh???
            unten schreibst Du doch :
            '$username' (KEINE VARIABLE) vor. Der Suchstring soll im Template nach '$username' suchen.
            Der Sinn eines templates ist doch auch so wie Du es erst beschrieben hast
            Beantworte nie Threads mit mehr als 15 followups...
            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

            Kommentar


            • #7
              Ups!
              Also ein Templatespraser ist dazu da um Signalwörter in einem Template durch irgent etwas zu ersetzten. Da der PC kein Hellseher ist muss man ihm sagen welches Signalwort durch welchen Text ersetzt werden muss. Das Signalwort befindet sich in der Variablen $suche und hat die Form einer Variablen. Des Weitern muss noch der Text angegben werden, duch den das Signalwort ersetzt werden soll. Dieser ist in der Variablen $ersetze gespeichert.
              Wenn die Templatefunktion aufgerufen wird, dann wird das in der Variablen $suche enthaltene Signalwort durch den Text der in $ersetze gespeichert ist ersetzt. Beim Aufrufen werden die Variablen in die Funktion mitübergeben.
              Gesucht ist die Reguöäre Expression um das in der Variablen $suche gespeicherte Signalwort duch $ersetze zu ersetzten.

              (Das musste ich jetzt so ausführlich machen, da ich mich sonst selbst duch Verwirrung gestoppt hätte)

              Kommentar


              • #8
                preg_replace("/ $username /i"," $ersetze ",$str);
                Beantworte nie Threads mit mehr als 15 followups...
                Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                Kommentar


                • #9
                  Ok
                  Jetzt wird wenigstens das ungepraste Template angezeigt!

                  Kommentar


                  • #10
                    zum problem, dass die zu ersetzenden 'signalwörter' und deren ersetzung erst zur laufzeit dynamisch gesetzt werden sollen:

                    du kannst preg_replace auch mit arrays füttern!


                    dann machst du dir ein array $suche mit inhalten wie '\$username', '\$autokennzeichen', und eine array $ersetze mit inhalten wie 'dr. no', 'be - nz 666', und übergibst diese als parameter an preg_replace().



                    p.s.: ich würde empfelen, nicht gerade die variablen-schreibweise von php $variable für die platzhalter im template zu verwenden, das macht die sache nicht übersichtlicher.
                    nimm eher sowas wie [--username--] im template, und ersetze das dann, das ist auch der gebräulichere weg, denke ich.
                    Zuletzt geändert von wahsaga; 22.03.2003, 15:31.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar

                    Lädt...
                    X