preg_replace und //1 treibt unfug !
tester
- php
moin !
folgendes beispiel/problem:
echo(preg_replace("/_(.*)_/s",ausgabe("\1"),"<br>_eins,zwei_<br>"));
function ausgabe($p)
{
$arr=split(',',$p);
//.......
return $arr[0];
}
komischerweise ist das ergebnis "eins,zwei".
daraus lässt sich schließen, dass irgendwas beim splitten vergessen wurde, oder?
allerdings ist daran doch gar nix falsch.
daher will ich behaupten, dass es an der seltsamen parameter übergabe von "\1" liegt.
dies steht aber so auf php.net/preg_replace ...
also woran liegts dann?
bzw wie mach ichs besser?
danke
Hi,
folgendes beispiel/problem:
echo(preg_replace("/_(.*)_/s",ausgabe("\1"),"<br>_eins,zwei_<br>"));
function ausgabe($p)
{
$arr=split(',',$p);
//.......
return $arr[0];
}
Was passiert?
Bevor preg_replace aufgerufen wird, wird die Funktion ausgabe("\1") aufgerufen.
Der Übergabeparameter "\1" soll an Kommata gesplittet werden.
Da kein Komma vorhanden ist, steht in $arr[0] also "\1".
Also wird jetzt preg_replace mit den Parametern wie folgt aufgerufen:
preg_replace("/_(.*)_/s","\1","<br>_eins,zwei_<br>")
Beim Matchen wird
eins,zwei
als erster tagged Expression gefunden.
Ersetzt werden soll durch \1 (das erste \ ist wegen des Escapens nötig).
Also durch den ersten tagged Expression.
Dieser ist - siehe oben -
eins,zwei
.
komischerweise ist das ergebnis "eins,zwei".
Das ist die logische Folge des gegebenen Codes.
daraus lässt sich schließen, dass irgendwas beim splitten vergessen wurde, oder?
Nein.
also woran liegts dann?
Du gehst davon aus, daß die Funktion ausgabe() zu einem anderen Zeitpunkt aufgerufen wird als das tatsächlich der Fall ist.
cu,
Andreas
Hallo test.
Was du machen willst, verlangt nach der Funktion preg_replace_callback().