molily: preg_replace()

Beitrag lesen

Hallo,

welches der beiden steht denn für zahlen? 1-3 stellige zahlen, um genau zu sein?

\d{1,3}

http://de.php.net/manual/de/pcre.pattern.syntax.php, Abschnitt »Repetition«.

Aha. Denke bitte hierüber nach: Ich habe nicht gefragt, was in $replace[0] steht, sondern was in $replace steht.

was soll schon in $replace stehen wenn es ein array ist? nichts natürlich, wenn du echo $replace machst kommt Array...

Du hast das »Denke bitte hierüber nach« überlesen - zuerst einmal ist ein Konstrukt in dieser Form nicht möglich, siehe letzter Satz: »If pattern and replacement are arrays [dies ist bei dir nicht der Fall --molily], then preg_replace() takes a value from each array and uses them to do search and replace on subject. If replacement has fewer values than pattern [dies ist bei dir nicht der Fall --molily], then empty string is used for the rest of replacement values. If pattern is an array and replacement is a string [dies ist bei dir nicht der Fall --molily], then this replacement string is used for every value of pattern . The converse would not make sense, though. [dies ist bei dir der Fall --molily]« (http://de.php.net/manual/de/function.preg-replace.php)

Du willst vermutlich etwas völlig anderes erreichen, als Cheatah annahm (wozu, je nachdem, preg_replace nicht einmal die erste Wahl ist).

Willst du einen jeweils den x-ten Treffer des Regulären Ausdrucks durch den String im x-ten Arrayelement ersetzen? Ich zitiere dich:

also das erste height wird mit "height=300" und das zweite mit dem zweiten $replace-eintrag, also zum beispiel mit "height=290" ersetzt.

Falls du nicht weißt, welchen genauen Wert das x-te height-Attribut hat (es ist im Grunde genommen irrelevant, man könnte es auch in zwei Schritten mit preg_replace und einer wahrscheinlich auf Rekursion basierenden Funktion lösen, welche nach und nach mit strstr() die Vorkommnisse abarbeitet und einen neuen String erzeugt), aber weißt, welchen Wert das x-te height-Attribut haben muss, würde folgendes helfen:

$replace=Array(
'height=500',
'height=600',
...
);

$string='...';

function liefere_ersatzwert () {
 global $replace;
 list(, $replacement_string)=each($replace); /* Liefere aktuellen Wert und rücke im Array um ein Element nach vorne */
 return $replacement_string;
}

$string2=preg_replace('/height=\d{1,3}/e', 'liefere_ersatzwert()', $string);

Zum pattern modifier »e« siehe: http://de.php.net/manual/de/pcre.pattern.modifiers.php und auch oben genannte Seite. (Sicherlich ließe sich das auch anders lösen.)

Mir fallen auch Lösungen zu anderen Fällen ein, vielleicht beschreibst du besser exakt, was du vorhast, denn dein Beispiel sowie deine Erklärungen sind nicht sehr ergiebig, sodass ich viel schreiben könnte, aber womöglich nichts auf deine Frage antworten würde.

Grüße,
Mathias

--
»(...) hier ist ja alles voll Gelegenheiten. Nur gibt es freilich Gelegenheiten, die gewissermaßen zu groß sind, um benützt zu werden; es gibt Dinge, die an nichts anderem als an sich selbst scheitern. Ja, das ist staunenswert.«
http://www.kafka.org/projekt/schloss/erst.html