Thomas: preg_replace - fehlersuche

Hi!

Warum bekomme ich hier ein "falsches" Ergebnis?

$str = "test_-_mit_Fehler";
$str = preg_replace('=(.*)_-_(.*)=Uis','\1', $str);

ich bekomme als string nun "testmit_Fehler", obwohl nur "test" gewünscht wäre.

Danke
Thomas

  1. gudn tach!

    $str = "test_-_mit_Fehler";
    $str = preg_replace('=(.*)_-_(.*)=Uis','\1', $str);

    ich bekomme als string nun "testmit_Fehler", obwohl nur "test" gewünscht wäre.

    weisst du, was der U-modifier macht? an ihm in kombination mit dem zweiten .* liegt es.
    die beiden anderen modifier sind hier uebrigens ebenfalls ueberfluessig.
    gleiches gilt fuer die zweite klammerung.

    also:
    preg_replace('=(.*)_-_.*=','$1', $str);

    prost
    seth

    1. Ja, U heißt ungreedy, wäre der nicht gesetzt würde bei "test_-_blabla_-_quaqua" "test_-_blabla" das Ergebnis sein, ich will aber "test" als Ergebnis!

      Der "i" Modifier muss hier zugegebener weiße nicht sein, "s" brauch ich aber auch!

      lg
      Thomas

      1. hi,

        Ja, U heißt ungreedy, wäre der nicht gesetzt würde bei "test_-_blabla_-_quaqua" "test_-_blabla" das Ergebnis sein, ich will aber "test" als Ergebnis!

        Dann setze (statt U) hinter den Quantifier im ersten geklammerten Ausdruck ein Fragezeichen, um nur dessen Gierigkeit aufzuheben.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Was meinst du jetzt, so?

          =(.*?)_-_(.*)=s

          thx
          Thomas

          1. gudn tach!

            Was meinst du jetzt, so?

            =(.*?)_-_(.*)=s

            ja, das wuerde aus "test_-_blabla_-_quaqua" -> "test" machen.
            allerdings ist es immer noch ueberfluessig, den hinteren teil einzuklammern, wenn nicht darauf referenziert wird.

            prost
            seth