40

I want to match any string that does not contain the string "DontMatchThis".

What's the regex?

user229044
  • 232,980
  • 40
  • 330
  • 338
Shaul Behr
  • 36,951
  • 69
  • 249
  • 387
  • Why do you want to do this with regex and not use String.IndexOf? – Filip Navara Aug 23 '09 at 10:54
  • 17
    Because sometimes your regex is in config and you can't change the code. Or because you need it as a subexpression of another more complex regex. Or any one of a number of reasons. You might as well ask, "Why don't you get your cat to mime the text to you via the medium of interpretive dance instead?". Sometimes you just don't have your cat to hand. – Alastair Maw Jan 06 '15 at 17:55

2 Answers2

68

try this:

^(?!.*DontMatchThis).*$
Kamarey
  • 10,832
  • 7
  • 57
  • 70
38

The regex to match a string that does not contain a certain pattern is

(?s)^(?!.*DontMatchThis).*$

If you use the pattern without the (?s) (which is an inline version of the RegexOptions.Singleline flag that makes . match a newline LF symbol as well as all other characters), the DontMatchThis will only be searched for on the first line, and only a string without LF symbols will be matched with .*.

Pattern details:

  • (?s) - a DOTALL/Singleline modifier making . match any character
  • ^ - start of string anchor
  • (?!.*DontMatchThis) - a negative lookahead checking if there are any 0 or more characters (matched with greedy .* subpattern - NOTE a lazy .*? version (matching as few characters as possible before the next subpattern match) might get the job done quicker if DontMatchThis is expected closer to the string start) followed with DontMatchThis
  • .* - any zero or more characters, as many as possible, up to
  • $ - the end of string (see Anchor Characters: Dollar ($)).
Graham
  • 7,431
  • 18
  • 59
  • 84
Wiktor Stribiżew
  • 607,720
  • 39
  • 448
  • 563