Исключить фразу из результата при помощи регулярных выражений

На вход приходит строка с наименованием системы и типом запроса. Пример:

Проблема в системе Наименование.

Такие типы запроса обрабатываются регуляркой через regex (Наименование|System)
Но нужно, чтобы не обрабатывались запросы на доступ в данную систему. Пример:

Предоставить доступ в Наименование.

Пытался использовать ^.*(Наименование|System)(?!.*(доступ Наименование|System)), но данная регулярка постоянно находит первую часть, что неверно.

Помогите написать корректное регулярное, пожалуйста.


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Используйте

^(?!.*доступ\s+в\s+(?:Наименование|System)).*(?:Наименование|System)

См. пример работы регулярного выражения.

Подробности

  • ^ - начало строки
  • (?!.*доступ[а-яё]*\s+в\s+(?:Наименование|System)) - после ноля и более символов, отличных от символов перевода строки, не должно быть слов доступ в Наименованиеилидоступ в System`
  • .* - ноль и более символов (отличных от символов перевода строки)
  • (?:Наименование|System) - одно из двух строковых значений.
→ Ссылка