Соответствуйте всему за исключением указанных строк

Я знаю, что следующий regex будет соответствовать "красный", "зеленый", или "синий".

red|green|blue

Существует ли простой способ заставить его соответствовать всему кроме нескольких указанных строк?

102
задан Alfred 8 March 2010 в 19:17
поделиться

2 ответа

Если вы хотите убедиться, что строка не является ни красной, ни зеленой, ни синей, ответ каски - он. Однако часто требуется убедиться, что линия нигде не содержит красного, зеленого или синего цветов. Для этого закрепите регулярное выражение с помощью ^ и включите . * в отрицательный прогноз:

^(?!.*(red|green|blue))

Также предположим, что вам нужны строки, содержащие слово «двигатель», но без каких-либо из эти цвета:

^(?!.*(red|green|blue)).*engine

Вы можете подумать, что можете разложить . * на начало регулярного выражения:

^.*(?!red|green|blue)engine     # Does not work

, но вы не можете. У вас должны быть оба экземпляра . * , чтобы он работал.

134
ответ дан 24 November 2019 в 04:29
поделиться

Зависит от языка, но обычно есть отрицательные утверждения, которые вы можете указать следующим образом:

(?!red|green|blue)

(Спасибо за исправление синтаксиса, приведенное выше допустимые Java и Perl, YMMV)

41
ответ дан 24 November 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: