EisFuX: preg_replace() mit Limit oder preg_match_all()

Beitrag lesen

Hallo marcus,

ein string mit beliebigem inhalt und mittendrin immer wieder ein bestimmtes token: z.b. "[xxx] ... [xxx] ... [xxx]".

jetzt muss ich jedes vorkommende token umbenennen, damit ich am ende folgendes habe:

...[xxx1] ... [xxx2] ... [xxx3] ... [xxx4]... etc.

die token an sich zu erkennen ist ja mittels regular expression noch relativ einfach, aber wie ersetze ich sie, damit ich eindeutige tokens im string habe??

Du hast (wie immer) mehrere Möglichkeiten. Hier mal zwei Ansätze:

Ansatz 1: Du benutzt den Limit-Parameter von preg_replace(). Leg ihn auf 1 fest und benutze preg_replace() in einer Schleife mit Zähler. So kannst du der Reihe nach die "Tokens" durch einen nummerierten String ersetzen.

Ansatz 2: Du benutzt preg_match_all() Übergib der Funktion das zusätzliche Flag PREG_OFFSET_CAPTURE, und sie liefert dir zum Array der gefundenen Tokens noch die Positionen im zu durchsuchenden String mit. Mit dieser Information kannst du dir den Ergebnisstring ebenfalls in einer Schleife wieder neu basteln -- und dabei statt der gefundenen Tokens eben die mit dem Zähler wieder einbauen.

MffG
EisFuX

--
Auch meine Hosenträger sind intelligent, in dem Sinne, dass man sie regulieren kann. Sie besitzen ein adaptives Verhalten.
Stanisław Lem