Tom123: Funktion in "Ersatz" von preg_replace()

Hallo zusammen,
bei der Verwendung von preg_replace() soll im Ersatz eine Funktion zum Einsatz kommen. Problem: Modifier "e" kann nicht verwendet werden (die Gründe für den Verzicht sind etwas komplizierter, lassen sich aber nicht beseitigen).

Folglich dachte ich an so etwas:

function erhoehen($n) { return $n++; }  
preg_replace("/Beispiel ([0-9]+)/", "Beispiel ".erhoehen('\\1'), "Beispiel 25");

(Das ist nur ein sinnfreies Beispiel)

Bei dieser Variante ohne den Modifier tritt aber ein seltsames Problem auf: $n in erhoehen() kann zwar per return zurückgegeben werden. Doch sobald man mit der Variable etwas anderes anstellt hat sie den Wert "\1". Das obige Beispiel würde nicht "Beispiel 26" zurückgeben, sondern einen Fehler, weil $n in erhoehen() ein String mit dem Wert "\1" ist. Schreibt man in erhoehen() return $n, so wäre die Ausgabe "Beispiel 25".

Was läuft da falsch?

Grüße
Tom123

  1. Hallo!

    Was läuft da falsch?

    siehe Beitrag

    André Laugks

    1. preg_replace_callback() geht leider nicht. Der Name der in "Ersatz" aufgerufenen Funktion darf nicht in einem String stehen, was bei preg_replace_callback() oder dem Modifier "e" der Fall ist. Sonst wäre die Sache einfach.

      Eine andere Lösung gibt es nicht?

      1. Eine andere Lösung gibt es nicht?

        Was hast Du eigentlich vor? Was soll das Ergebis sein bzw. was erwartest Du und tritt nicht ein? Hast Du Dir den mal angeschaut, wie man in der Funktion, die man als Callback aufruft, an die Werte kommt?

        André Laugks

        1. Bei preg_replace_callback() wird die Callback-Funktion ja in einem String übergeben, was bei mir leider nicht geht. Das hängt mit einem Fehler mit einem Fehler in ionCube und obfuscation zusammen. Bei der Obfuscation werden ja die Funktionen umbenannt - leider nicht die in Stings. Als würde PHP hier einen Fatal Error "Undefined function ..." ausgeben. Deswegen suche ich nach einer anderen Lösung. Natürlich ließe sich das auch mit preg_match() und einer Schleife lösen, aber vielleicht gibts ja doch eine weniger aufwendige Lösung.

        2. Werde es wohl mit preg_match_all() und einer Schleife lösen müssen. Trotzdem Danke für deine Mühe.