Ankündigung

Einklappen
Keine Ankündigung bisher.

preg_replace: Zahl anstatt String

Einklappen

Neue Werbung 2019

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

  • preg_replace: Zahl anstatt String

    Hallo Leute,

    ich habe folgenden Tag:

    {tag:X}

    X soll dabei eine beliebige Zahl darstellen.

    Jetzt möchte ich diesen Tag ersetzen.

    Folgendes habe ich probiert.

    Code:
    $output = preg_replace('/{tag:(.*?)}/', meine_funktion($parameter1, "\\1"), $output);
    Das Problem: meine_funktion() erwartet als zweiten Parameter eine Zahl (double laut Fehlermeldung) und keinen String. (Der zweite Parameter stellt einen Divisor dar.)

    Wie kann ich den String in eine Zahl umwandeln?

    Oder wie kann ich den Tag ersetzen, so daß gleich eine Zahl und kein String zurückgegeben wird?

    Wäre nett, wenn mir jemand auf die Sprünge helfen kann.

    Danke Euch.


  • #2
    der fehler liegt an einer anderen stelle. du willst wohl das gefundene subpattern an die funktion übergeben, und dann durch den outptut der funktion ersetzen? dann benötigst du modifier e und mußt deinen ersatz-string noch verändern.

    im moment übergibst du nämlich den string "\\1" (und nicht die backref) an die funktion - klar, daß da ein fehler kommt.

    irgendwie so:
    PHP-Code:
    $output preg_replace('#\{tag:(.*)\}#Ue''meine_funktion('.$parameter1.', \1)'$output); 
    wie gesagt, schau dir das manual zu preg_replace an, dort findest du was über modifier e. dein ersatzstring muß so formuliert sein, daß er sich per eval() ausführen ließe.

    Kommentar


    • #3
      Soweit ich weiß ist \\1 vollkommen korrekt - Entwerder \\x oder $x kann als Backreference übergeben werden.
      Wie kann ich den String in eine Zahl umwandeln?
      PHP-Code:
      <?php
      $string 
      '12345';

      // Entweder..
      $newstring = (int)$string;

      // .. oder
      $newstring intval($string);
      ?>

      Kommentar


      • #4
        Zitat von Chr!s
        Soweit ich weiß ist \\1 vollkommen korrekt - Entwerder \\x oder $x kann als Backreference übergeben werden.
        in diesem fall aber nicht, da mit der backref eine funktion gefüttert werden soll, deren output als ersatz herhalten soll.

        auch du kannst dir gerne den entsprechenden abschnitt im manual dazu anschauen.

        es geht hier auch nicht um das wandeln eines strings in eine zahl - das problem ist ein ganz anderes (s.o.). es wird niemals die zahl an die funktion übergeben, sondern der string "\\1", da die funktion in der momentanen definition erst ausgeführt wird, bevor überhaupt backrefs bestimmt werden, eine ersetzung durchgeführt wird.

        Kommentar


        • #5
          Zitat von derHund
          irgendwie so:
          PHP-Code:
          $output preg_replace('#\{tag:(.*)\}#Ue''meine_funktion('.$parameter1.', \1)'$output); 
          Ich habe es zwar nicht ganz verstanden (auch nach dem Lesen im manual), aber dieser Code funktioniert perfekt.

          Vielen Dank.

          Kommentar

          Lädt...
          X