preg_replace durch Funktion ersetzen?

  • Hallo,

    ich suche schon lange nach einer Möglichkeit, einen String nach einem bestimmten Wort zu durchsuchen und dieses, wenn es gefunden wurde, durch eine in PHP geschriebene Funktion zu ersetzen.

    Bsp:

    function neue_funktion()
    {
    $i = 5 + 3;
    echo $1;
    }
    $string = "Ich mag PHP!";
    $suchen = "mag";
    $neuer_String = preg_replace($suchen, neue_funktion(), $string);

    Hat jemand eine Idee, wie man das Problem lösen kann oder ob man es überhaupt lösen kann? Ich habe schon so ziemlich alles ausprobiert...
    Danke :)

  • Wenn deine Funktion einen Wert zurückgibt, geht das, ein echo reicht nicht. Wobei allerdings ein str_replace völlig ausreicht, man muss nicht gleich mit Kanonen auf Spatzen schießen, um ein einfaches Ersetzen zu erreichen.

  • Das Problem ist nur, dass ich in der Funktion HTML "erzeuge" und einige Schliefen verwende.

    Wie kann ich das alles denn zu einem "String" zusammenfügen, um es über return zurück zugeben?

  • Ich freue mich, an dieser Stelle ein Grundlagenkurs geben zu dürfen :(

  • Stimmt, da war ja was... :)

    Vielen Dank für die schnelle Hilfe

  • Jetzt habe ich doch nochmal ne Frage...

    Ich will aus einem Text die HTML Codes von Bildern suchen und den src der Bilder verändern (durch eine Funktion):

    Das funktioniert aber nur, wenn ich der Funktion keinen Wert übergebe (in diesem Fall $2, denn das enthält ja das, was zwischen dem src=" ... " steht).
    Ich muss aber etwas übergeben, da ich ansonsten nichts verändern kann.

    Liegt es an einer falschen Schreibweise oder funktioniert das garnicht?

  • Aus der Doku (ja, die gibt es wirklich)

    Zitat


    Grundlegendes

    Variablen werden in PHP dargestellt durch ein Dollar-Zeichen ($) gefolgt vom Namen der Variablen. Bei Variablen-Namen wird zwischen Groß- und Kleinschreibung unterschieden (case-sensitive).
    Variablen-Namen werden in PHP nach den gleichen Regeln wie andere Bezeichner erstellt. Ein gültiger Variablen-Name beginnt mit einem Buchstaben oder einem Unterstrich ("_"), gefolgt von einer beliebigen Anzahl von Buchstaben, Zahlen oder Unterstrichen.

    Richtig debuggen

    • Man bemerkt, dass ein Skript nicht das tut, was es soll.
    • Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL);
    • Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    • Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    • An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysql_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    • Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    • Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    • Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    • Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
  • Ja das is mir schon bewusst ;)

    Nur benennt preg_replace die Variabelen doch $1, $2, $3, usw.
    Da habe ich keinen Einfluss drauf:

    Zitat


    replacement darf Referenzen in der Form \\n oder (ab PHP 4.0.4) $n enthalten, wobei Letztere vorzuziehen ist. Jede dieser Referenzen wird mit dem Text ersetzt, der vom n-ten eingeklammerten Suchmuster erfasst wurde. n kann einen Wert von 0 bis 99 haben. \\0 oder $0 beziehen sich auf den Text, der auf das komplette Suchmuster passt. Um die Nummer des erfassenden Teil-Suchmusters zu erhalten, werden öffnende Klammern mit 1 beginnend von links nach rechts gezählt. Um einen Backslash im Ersatz zu verwenden, muss er verdoppelt werden ("\\\\" PHP-Zeichenkette).