Is it possible to write a regex that returns the converse of a desired result? Regexes are usually inclusive - finding matches. I want to be able to transform a regex into
You can invert the character set by writing a ^
at the start ([^…]
). So the opposite expression of [ab]
(match either a
or b
) is [^ab]
(match neither a
nor b
).
But the more complex your expression gets, the more complex is the complementary expression too. An example:
You want to match the literal foo
. An expression, that does match anything else but a string that contains foo
would have to match either
foo
(^.{0,2}$
), orfoo
(^([^f]..|f[^o].|fo[^o])$
), orfoo
.All together this may work:
^[^fo]*(f+($|[^o]|o($|[^fo]*)))*$
But note: This does only apply to foo
.