MudGuard: preg_replace und //1 treibt unfug !

Beitrag lesen

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

--
MudGuard? Siehe http://www.Mud-Guard.de/
Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.