Регулярное выражение не соответствующие ничему

Имеется корпоративное файловое хранилище примерно такой структуры: Группа/Проект/Состояние/Файл

Есть внутренняя утилиту для поиска и обработки файлов с возможностью указывать условие поиска.

Глубина вложенности не постоянная, например у некоторых групп есть подгруппы, у некоторых проектов есть подпроекты, а у некоторых проектов с небольшим количеством файлов нет подкаталогов Состояние, оно отражено в имени файла. Структуру менять нельзя.

В 99% случае условие поиска имеет следующий вид: Все файлы из групп Группа1 и Группа2, кроме состояний Состояние1 и Состояние2

Поэтому в утилите отсев сделан в виде двух регулярок:

  1. Пропускать файлы, не соответствующие первой - отсев по группе/подгруппе/проекту
  2. Пропускать файлы, соответствующие второй - отсев по состоянию

Появилась необходимость для некоторых проектов обрабатывать все состояния, то есть вторая регулярка не должна срабатывать.

Если регулярку не заполнять, программа не начинает обработку.

Собственно вопрос: Какому перл-совместимому (PCRE) регулярному выражению не будет соответствовать ни одно имя файл?

PS файловое хранилище на linux, поэтому в имен файла могут быть любые символы


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

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

Регулярные выражения, которые никогда не найдут совпадения ни в одной строке:

  • x^ - Буква x, за которой следует начало строки (универсальный шаблон)
  • $x - Конец строки, после которого должна идти буква x (универсальный шаблон)
  • x\ba - Буква x, за которой должна быть граница слова и буква a (требуется поддержка границ слова, в PostgreSQL это \y)
  • \b\B/\B\b - Позиция, которая должна быть одновременно и границей слова и противположной позицией (требуется поддержка границ слова, в PostgreSQL, Tcl, TRE это \m и \M)
  • x++x - После одной и более x должна быть ещё одна буква x (без бэктрекинга) (требуется поддержка сверхжадных кванитификаторов)
  • (?>x+)x - То же, что и x++x
  • (?!) - Сразу после текущей позиции не должно быть ничего (требуется поддержка блоков предварительного просмотра)
  • (?=a)x - Сразу после текущей позиции должна быть a И x (требуется поддержка блоков предварительного просмотра)
  • (?!a)a - Сразу после текущей позиции не должно быть a, но должна быть a (требуется поддержка блоков предварительного просмотра)
  • (*FAIL) - То же, что и (?!) (только PCRE)
  • (*F) - То же, что и (*FAIL).
→ Ссылка