(?=foo) Lookahead Asserts that what immediately follows the current position in the string is foo
(?<=foo) Lookbehind Asserts that what immediately precedes the current position in the string is foo
(?!foo) Negative Lookahead Asserts that what immediately follows the current position in the string is not foo
(?<!foo) Negative Lookbehind Asserts that what immediately precedes the current position in the string is not foo
you cannot use a negated character class to match a q not followed by a u. Negative lookahead provides the solution: q(?!u).
Positive lookahead works just the same. q(?=u) matches a q that is followed by a u