Regex
See summary
Match everything but
- a string starting with a specific pattern (e.g. any - empty, too - string not starting with foo):
- Lookahead-based solution for NFAs:
^(?!foo).*$
^(?!foo)
- Negated character class based solution for regex engines not supporting lookarounds:
^(([^f].{2}|.[^o].|.{2}[^o]).*|.{0,2})$
^([^f].{2}|.[^o].|.{2}[^o])|^.{0,2}$
- Lookahead-based solution for NFAs:
- a string ending with a specific pattern (say, no world. at the end):
- Lookbehind-based solution:
(?<!world\.)$
^.*(?<!world\.)$
- Lookahead solution:
^(?!.*world\.$).*
^(?!.*world\.$)
- POSIX workaround:
^(.*([^w].{5}|.[^o].{4}|.{2}[^r].{3}|.{3}[^l].{2}|.{4}[^d].|.{5}[^.])|.{0,5})$
([^w].{5}|.[^o].{4}|.{2}[^r].{3}|.{3}[^l].{2}|.{4}[^d].|.{5}[^.]$|^.{0,5})$
- Lookbehind-based solution:
- a string containing specific text (say, not match a string having foo):
- Lookaround-based solution:
^(?!.*foo)
^(?!.*foo).*$
- POSIX workaround: Use the online regex generator at www.formauri.es/personal/pgimeno/misc/non-match-regex
- Lookaround-based solution:
- a string containing specific character (say, avoid matching a string having a | symbol):
^[^|]*$
- a string equal to some string (say, not equal to foo):
- Lookaround-based:
^(?!foo$)
^(?!foo$).*$
- POSIX:
^(.{0,2}|.{4,}|[^f]..|.[^o].|..[^o])$
- Lookaround-based:
- a sequence of characters:
- PCRE (match any text but cat):
/cat(*SKIP)(*FAIL)|[^c]*(?:c(?!at)[^c]*)*/i or /cat(*SKIP)(*FAIL)|(?:(?!cat).)+/is
- Other engines allowing lookarounds:
(cat)|[^c]*(?:c(?!at)[^c]*)*
(or(?s)(cat)|(?:(?!cat).)*,
or(cat)|[^c]+(?:c(?!at)[^c]*)*|(?:c(?!at)[^c]*)+[^c]*)
and then check with language means: if Group 1 matched, it is not what we need, else, grab the match value if not empty
- PCRE (match any text but cat):
- a certain single character or a set of characters:
Use a negated character class:
[^a-z]+
(any char other than a lowercase ASCII letter) Matching any char(s) but |:[^|]+