Negating a set of words via java regex
Asked Answered
H

3

23

I would like to negate a set of words using java regex.

Say, I want to negate cvs, svn, nvs, mvc. I wrote a regex which is ^[(svn|cvs|nvs|mvc)].

Some how that seems not to be working.

Haygood answered 26/8, 2009 at 9:48 Comment(4)
Possible duplicate: #43490Ascidium
Also see: #406730Ascidium
...and #718144Ascidium
This kind of question appears quite often so I think it deserves a tag. I've added one called "regex-negation".Ascidium
T
52

Try this:

^(?!.*(svn|cvs|nvs|mvc)).*$

this will match text if it doesn't contain one of svn, cvs, nvs or mvc.

This is a similar question: C# Regex to match a string that doesn't contain a certain string?

Tumbledown answered 26/8, 2009 at 10:37 Comment(0)
C
2

Your regex is wrong. Between square brackets, you can put characters to require or to ignore. If you don't find ^(svn|cvs|nvs|mvc)$, you're fine.

Cia answered 26/8, 2009 at 9:56 Comment(1)
that actually not helpful as this is not purely regex. if you don't have to option to change code, this won't solve the QAs issue.Cloudcapped
R
1

It's not that simple. If you want to negate a word you have to split it to letters and negate each letter.

so to negate

/svn/

you have to write

/[^s][^v][^n]/

So what you want to filter out will turn into really ugly regex and I think it's better idea to use this regex

/svn|cvs|nvs|mvc/

and when you test your string against it, just negate the result.

In JS this would look more less like that:

!/svn|cvs|nvs|mvc/.test("this is your test string");
Rotorua answered 26/8, 2009 at 9:56 Comment(2)
that's probably not correct, because you don't match the beginning ^ and the end $ of the stringCia
Well, I'm searching for any of the words on any position in a test string. If you want to match only the whole words then ^ at the beginning and $ at the end will do the trick.Rotorua

© 2022 - 2024 — McMap. All rights reserved.