Я знаю, что следующий regex будет соответствовать "красный", "зеленый", или "синий".
red|green|blue
Существует ли простой способ заставить его соответствовать всему кроме нескольких указанных строк?
Если вы хотите убедиться, что строка не является ни красной, ни зеленой, ни синей, ответ каски - он. Однако часто требуется убедиться, что линия нигде не содержит красного, зеленого или синего цветов. Для этого закрепите регулярное выражение с помощью ^
и включите . *
в отрицательный прогноз:
^(?!.*(red|green|blue))
Также предположим, что вам нужны строки, содержащие слово «двигатель», но без каких-либо из эти цвета:
^(?!.*(red|green|blue)).*engine
Вы можете подумать, что можете разложить . *
на начало регулярного выражения:
^.*(?!red|green|blue)engine # Does not work
, но вы не можете. У вас должны быть оба экземпляра . *
, чтобы он работал.
Зависит от языка, но обычно есть отрицательные утверждения, которые вы можете указать следующим образом:
(?!red|green|blue)
(Спасибо за исправление синтаксиса, приведенное выше допустимые Java и Perl, YMMV)