C# Regex to match a string that doesn't contain a certain string?
Asked Answered
C

2

40

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

What's the regex?

Cappella answered 23/8, 2009 at 10:51 Comment(2)
Why do you want to do this with regex and not use String.IndexOf?Swafford
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.Lane
G
68

try this:

^(?!.*DontMatchThis).*$
Gunwale answered 23/8, 2009 at 11:14 Comment(0)
L
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 ($)).
Legend answered 25/8, 2016 at 21:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.