Ist es nicht so, dass Verneinung nur innerhalb eckiger Klammern gilt ... ?
Die Negierung mit "^"? Doch, ist schon so, aber in eckigen Klammern werden Zeichen definiert, keine Strings. Für negierte Strings gibt es (?!string) und (?<!string).
~^x[^abc|def]~ hieße "Am Anfang ein kleines x, was nicht von "abc" oder "def" gefolgt ist"?
Nein, das hieße am Anfang ein kleines x, was nicht von einem a, b, c, |, d, e oder f gefolgt ist. (Ich bin mir aus dem Kopf nicht ganz sicher aber "|" hat innerhalb von [] glaube ich keine besondere Bedeutung.)