Регулярное выражение исключает некоторые слова, но соответствует одному - PullRequest
0 голосов
/ 09 ноября 2018

Можно ли написать регулярное выражение, которое соответствует "findme", но не соответствует, если строка содержит слова "черный", "красный" или "желтый"?

Possible regex: (?!black|red|yellow)findme

исключены слова: желтый, черный, красный

Тестовые линии:

findme     (OK)
xyz        (NOT!)
XYZfindmeXYZ     (OK)
somethingelseFINDMEsome_thingelse     (OK)
BLACK_ findme       (NOT !)
BLACK findme       (NOT !)
XyBlacK findme xyz_xy       (NOT !)
xy findme RED           (NOT !)
yellow__ findme _xy        (NOT !)
_xy_ findme _something    (OK)

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Используйте отрицательный взгляд вперед, привязанный к началу, для нежелательных терминов:

^(?i)(?!.*(black|red|yellow)).*findme

См. живое демо прохождение всех ваших тестов.

(?i) означает «игнорировать регистр»
(?!...) - негативный взгляд в будущее (утверждает, не потребляя, чтобы выражение не было найдено)

0 голосов
/ 09 ноября 2018

Вы можете использовать следующее регулярное выражение:

^(?!.*(?:black|red|yellow)).*(findme)

Демо: https://regexr.com/42r4q


подробности:

  • ^ - соответствует началу строки
  • (?!) - негативный взгляд
  • .* - соответствует любому символу (кроме новых строк) 0+ раз
  • (?:) - группа без захвата
  • black|red|yellow - соответствует «черному», «красному» или «желтому»
  • findme - соответствует строке 'findme'

Флаги:

  • g - глобальный
  • i - без учета регистра
  • m - многострочный
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...