Отрицание набора слов через регулярное выражение Java - PullRequest
18 голосов
/ 26 августа 2009

Я бы хотел отменить набор слов с помощью регулярных выражений Java.

Скажите, я хочу отрицать cvs, svn, nvs, mvc. Я написал регулярное выражение, которое ^[(svn|cvs|nvs|mvc)].

Некоторые, кажется, не работают.

Ответы [ 3 ]

43 голосов
/ 26 августа 2009

Попробуйте это:

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

это будет соответствовать тексту, если он не содержит svn, cvs, nvs или mvc.

Это похожий вопрос: C # Regex для соответствия строке, которая не содержит определенной строки?

3 голосов
/ 26 августа 2009

Это не так просто. Если вы хотите отрицать слово, вы должны разделить его на буквы и отменить каждую букву.

так что отрицать

/svn/

Вы должны написать

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

То, что вы хотите отфильтровать, превратится в действительно ужасное регулярное выражение, и я думаю, что лучше использовать это регулярное выражение

/svn|cvs|nvs|mvc/

и когда вы проверяете свою строку на ней, просто отрицаете результат.

В JS это выглядело бы более менее так:

!/svn|cvs|nvs|mvc/.test("this is your test string");
2 голосов
/ 26 августа 2009

Ваше регулярное выражение неверно. Между квадратными скобками вы можете поместить символы, чтобы требовать или игнорировать. Если вы не найдете ^(svn|cvs|nvs|mvc)$, вы в порядке.

...