tags:

views:

54

answers:

3

How can I create a regex NOT to match something? For example I want to regex to match everything that is NOT the string "www.petroules.com".

I tried [^www\.petroules\.com] but that didn't seem to work.

+3  A: 
^(?!www\.petroules\.com$).*$

will match any string other than www.petroules.com. This is called negative lookahead.

[^www\.petroules\.com]

means "Match one character except w, p, e, t, r, o, u, l, s or dot".

Tim Pietzcker
Just what I needed, thanks. Will accept in ~10 minutes as you submitted the first correct answer.
Jake Petroules
`.*$` is a noop and can be omitted.
Wayne Conrad
OK, but of course then the match result will be an empty string (with a successful match). If you're just checking whether a match is possible, then this doesn't matter. So yes, omit the `.*$`, and you're done faster.
Tim Pietzcker
@Tim, good point. I wasn't considering the match result. So, `.*$` *might* be a noop, or might not, depending.
Wayne Conrad
@Wayne, in this particular case the regex will only ever match the entire input string or nothing at all, so there is no real reason to actually match the string because you already know what the match is going to be. In other cases, of course, the actual match might matter.
Tim Pietzcker
A: 
(?!...)

This is called negative lookahead. It will only match if the regex ... does not match. However, note that it DOES NOT consume characters. This means that if you add anything else past the ), it will start matching right away, even characters that were part of the negative lookahead.

orangeoctopus
A: 

Regular expressions are made to match strings (see also the regular grammars, if you want to know more about what type of strings can be matched).

A solution to your problem is to match your string and then using your programming language inverse the result.

Chris