gudn tach!
$res = preg_match ('/^(?!test).{4}\z/', $string, $matches);
wobei hier die von dir bereits angesprochenen alternativen besser (besser lesbar, wartbar und meist auch schneller) sind:
also a.b. string$ !== 'test';
Möglichkeit 2: Du willst jeden beliebigen String matchen, der test NICHT enthält:
$res = preg_match ('/^(?!.*test.*).*\z/', $string, $matches);
da ist einiges redundant. die aufgabenstellung der moeglichkeit 2 wird bereits von
if(preg_match('/^(?!.*test)/', $string)) $matches=$string;
erfuellt (wenn php sich hier nicht anders verhaelt als perl).
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);
analog zu oben sollte
/^(?!.*\btest\b)/
genuegen.
[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.]
klarheit ist natuerlich nicht fuer jeden das gleiche. ich finde die reduzierten beispiele leichter verstaendlich.
prost
seth