brauche hilfe bei preg_replace

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

  • brauche hilfe bei preg_replace

    tja, ich stehe grad vor einem scheinbar unlösbaren problem ...zumindest für mich...

    PHP-Code:
    <?
        $str = "__ovar_hey__";
            $str = htmlentities($str);
        $bla[hey] = "hallo";
            $str = preg_replace ('/\_\_ovar\_(.*?)\_\_/', $bla[$1], $str);

            echo $str;


    ?>
    so, hier hab ich das prinzip versuch aufzubauen. klappen tuts leider nicht.

    Parse error: parse error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in D:\Programme\xampp\htdocs\mystuff\PacBB\alpha 0.1\upload\test.php on line 5
    woran dieses problem liegt weiss ich auch.
    $bla[$1] ist das problem. er will $1 nicht als gültigen arraynamen akzeptieren.

    könnt ihr mir weiterhelfen, oder andere wege das problem zu lösen nennen?

  • #2
    Hast dus mal so probiert?

    PHP-Code:
    $str preg_replace ('/__ovar_(.*?)__/'$bla['$1'], $str); 
    Array-Referenzn müssen soweit ich weiß immer in ' ' angegeben werden. Tests mal durch

    Gruß

    Edit: Unsinn, ich meinte natürlich:

    PHP-Code:
    $str preg_replace ('/__ovar_(.*?)__/'$bla["$1"], $str); 
    Sonst erkennt ja PHP nich das es ne Variable is sondern denkt es wärn Konstanter String.

    Gruß
    Zuletzt geändert von ArSeN; 19.04.2006, 20:34.
    Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

    Kommentar


    • #3
      nein, nur wenn es strings sind. sonst wertet der $1 als string, habs schon probiert...

      trotzdem danke

      Kommentar


      • #4
        Variablen dürfen keine Ziffer am Anfang haben

        Kommentar


        • #5
          Hm komisch, ich habs grad getestet und bei mir gehts wunderbar mit folgendem Code:

          PHP-Code:
          <?php
            $arr
          ['test'] = "hallo";
            
          $eins "test";

            echo 
          $arr["$eins"];
          ?>
          Wo schreibst du denn in $1 eigentlich überhaupt was rein? Sehe ich irgendwie gar nicht..

          Nochn edit:
          Variablen dürfen keine Ziffer am Anfang haben
          Da war ich mir nich ganz sicher, mist - mein doofer Editor hat nämlich bein Syntax-Highlighting so getan als ginge das =)
          Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

          Kommentar


          • #6
            $1 ist (.*?). das ist in preg_replace so implemiert.

            deswegen geht dein script auch. weil er da keine zahl am anfang hat, und die var nicht aus preg_replace kommt.

            Kommentar


            • #7
              Bist du dir sicher, dass du nicht etwas verwechselst? Ich kenne das nur mit Backslashes.. also \\1 und \\2 usw

              Kommentar


              • #8
                nein, ich habs probiert, $1 zu echoen funktioniert.

                Kommentar


                • #9
                  Das geht meiner Meinung nach nicht in einem Aufwasch. Man könnte also zuerst
                  mit preg_match den Schlüssel (hey) finden, dann mit preg_replace ersetzen durch
                  $bla[$matches[1]].

                  Grund ist, dass beim Aufruf von preg_replace der Parameter $bla[$1] ausgewertet
                  wird (werden möchte), nur "$1" als String würde stehen gelassen.

                  Es könnte meiner Meinung nach auch mit preg_replace_callback(....) gehen.
                  Die callback Funktion "cb" könnte lauten:
                  function cb ($matches)
                  {
                  ..global $bla;
                  ..return $bla[$matches[1]];
                  }

                  Das ist allerdings Theorie anhand des Manuals. Viel Erfolg.

                  PS dem anderen Poster, $1 ist scheinbar bevorzugt über \\\\1
                  Zuletzt geändert von miximaxi; 19.04.2006, 22:30.

                  Kommentar

                  Lädt...
                  X