[RegExp] Alles außer "abc" - erledigt

chrissel

Woohooo!
ID: 211634
L
20 April 2006
4.489
472
So, eine kurze Frage hier ;)
Bei einem regulären Ausdruck werden ja mittels ([^a]*) alle Zeichen außer 'a' selektieren.
Ich möchte nun in einem String solange alle Zeichen selektieren wie kein 'abc' kommt.

2 Beispiele:
aaaabcdefg -> aaa
aaaacdeabc -> aaaacde

Also es muss kein 'abc' vorkommen, sonst dürfte es ja folgendes sein: ^(.*?)abc


EDIT:
Mit Astrodans Hilfe habe ich das hinbekommen :)
Lösung: "Look-around assertions"
Hm.. Die Lösung klappt nun aber nicht auf dieses Beispiel hier :/
Sollte hier jemand Interesse dadran haben, werde ich mal versuchen die Lösung darzustellen und dieses Beispiel passend ein wenig abändern.
 
Zuletzt bearbeitet:
diese Lösung wäre recht einfach (wenn auch nicht übermäßig schön): mach es umgekehrt, löse vom String ab dem "abc" ab, dann weisst du die länge mit strlen und kannst es mit substr abtrennen.
 
Zuletzt bearbeitet:
Code:
/(.*)(?=abc)/is
[..]

Ja das klappt nun auf dem Beispiel oben, danke ;)
Vorher war das ein wenig anders, da war im zweiten Beispiel gar kein "abc" drin.
Hatte ich aber dann noch umgeändert als ich das raus hatte und gemerkt habe, dass so etwas doch sehr wichtig ist.

Nur nun kommt PHP mit meinem Code nicht klar.. Habe gesucht und das ist wohl ein PHP Bug.
Bekomme: Compilation failed: lookbehind assertion is not fixed length at offset 28
Obwohl meine Assertion garantiert eine feste Länge hat: (?<!\\)
 
Wieso nicht einfach ohne RegExp?
PHP:
$position = strpos($string, 'abc');
if ($position !== false) {
  $string = substr($string, 0, $position);
}