preg_replace - fehlersuche
Thomas
- php
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
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
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
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
Was meinst du jetzt, so?
=(.*?)_-_(.*)=s
thx
Thomas
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