Hallo Jan,
wie muss ein RegExp aussehen, der "alles außer 'test'" wählt?
Dann müsstest Du erst einmal definiern, was Du mit "alles außer" meinst... Gut, in jedem Fall wirst Du um negative Lookahead-Assertions nicht herumkommen, aber je nachdem, was Du genau erreichen willst, kann es kompliziert werden.
Möglichkeit 1: Du willst jeden 4-buchstabigen String matchen, der NICHT test ist:
$res = preg_match ('/^(?!test).{4}\z/', $string, $matches);
Möglichkeit 2: Du willst jeden beliebigen String matchen, der test NICHT enthält:
$res = preg_match ('/^(?!.*test.*).*\z/', $string, $matches);
Möglichkeit 3: Du willst jeden beliebigen String matchen, der das Wort "test" NICHT enthält (es aber durchaus innerhalb von Wörtern wie "tester" oder so vorkommen kann):
$res = preg_match ('/^(?!.*\btest\b.*).*\z/', $string, $matches);
Möglichkeit 4: ...
[Es gibt von jedem Ausdruck auch mögliche Variationen, die unter Umständen performanter oder imperformanter sind, meine habe ich wegen der Klarheit so gewählt.]
Ich dachte an [^test], aber der tut es nicht...
[^test] ist identisch zu [^tes] und das matcht genau EIN zeichen, das nicht t, e und s ist.
Viele Grüße,
Christian