Caret as the first character means 'not'
[^abc] matches any single character that is NOT a, b, or c. The caret ^ at the start of a class flips the meaning — it's now "any character except these."
This is genuinely one of the most useful tools in regex. "Match until you hit a quote" → [^"]*. "Skip everything that's not a digit" → [^0-9]+. "Take all non-whitespace" → [^\s]+ (or just \S+, lesson 7).
Negated classes match newlines (unlike .)
This is the gotcha. [^x] matches every character that isn't x, INCLUDING \n. The dot . stops at newlines without DOTALL; negated classes don't. So [^"]* will happily span multiple lines, while .* won't.
This is sometimes what you want, sometimes not. If you're parsing a quoted string that legitimately spans lines, [^"]* is correct. If you want "everything until a quote on the same line," use [^"\n]*.
The caret is only special in position 1
[a^b] is the literal class "a, caret, or b." Caret is only the negation operator when it's the very first character inside the brackets.