tester: preg_replace und //1 treibt unfug !

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

  1. 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.
  2. Hallo test.

    Was du machen willst, verlangt nach der Funktion preg_replace_callback().