35

Is it possible to do string negation in regular expressions? I need to match all strings that do not contain the string "..". I know you can use ^[^\.]*$ to match all strings that do not contain "." but I need to match more than one character. I know I could simply match a string containing ".." and then negate the return value of the match to achieve the same result but I just wondered if it was possible.

chaos
  • 122,029
  • 33
  • 303
  • 309
Paul Bevis
  • 831
  • 1
  • 8
  • 16
  • Linked: [Regular Expressions and negating a whole character group](http://stackoverflow.com/questions/977251/regular-expressions-and-negating-a-whole-character-group) – Unihedron Sep 29 '14 at 01:46

2 Answers2

42

You can use negative lookaheads:

^(?!.*\.\.).*$

That causes the expression to not match if it can find a sequence of two periods anywhere in the string.

chaos
  • 122,029
  • 33
  • 303
  • 309
5
^(?:(?!\.\.).)*$

will only match if there are no two consecutive dots anywhere in the string.

Tim Pietzcker
  • 328,213
  • 58
  • 503
  • 561