Маски файлов

Проверка имён файлов по маске: * — любая последовательность символов, ? — ровно один символ

Например «?a*.txt»: «?» — один символ, «*» — любые символы

По одному в строке; пустые строки пропускаются

Сравнивать без учёта регистра букв

Нашли ошибку или хотите предложить улучшение?

Улучшить калькулятор «Маски файлов»

Теория

Маска — это шаблон, по которому проверяют имена файлов. В маске два особых символа: * заменяет любую последовательность символов, в том числе пустую, а ? — ровно один символ. Все остальные символы, включая точку, сравниваются буквально: маска a*.txt подходит файлам aa.txt и aab.txt, но не подходит aba.doc, потому что расширение в шаблоне задано явно.

Компьютер проверяет маску, переводя её в регулярное выражение: литералы экранируются, * превращается в .*, ? — в ., а всё выражение зажимается между началом и концом строки: маска ?a*.txt превращается в ^.a.*\.txt$. Число подходящих файлов — это сумма по всем именам: \(M = \sum_{f \in F} m(f)\), где \(m(f) = 1\), если имя подходит под маску, и \(m(f) = 0\) иначе.

Сравнение бывает чувствительным к регистру и нет. В Windows и DOS имена файлов регистронезависимы, в Linux — нет, поэтому в маске есть отдельный переключатель «Не учитывать регистр»: при его включении к выражению добавляется флаг i, и маска A*.TXT находит aa.txt.

Важно: * подходит и пустой последовательности, поэтому маска a*.txt подходит файлу a.txt — звёздочка не требует ни одного символа.

Пример с решением

  1. Условие. Маска ?a*.txt, файлы: aa.txt, aba.doc, da.txt, na.txt, aab.txt.
  2. Перевод в выражение. ? — один любой символ, a — литерал, * — любые символы, .txt — литерал с экранированной точкой: ^.a.*\.txt$.
  3. Проверка aa.txt. Первый символ a попадает в ?, второй a совпадает с литералом, дальше * пусто и остаётся .txt — подходит.
  4. Проверка da.txt и na.txt. Первые символы d и n тоже подходят под ?, второй символ — a — совпадает с литералом: оба файла подходят.
  5. Проверка aba.doc. Расширение .doc не совпадает с литералом .txt — файл не подходит.
  6. Проверка aab.txt. ? берёт первую a, литерал — вторую a, * забирает b, остаётся .txt — подходит.
  7. Ответ. Подходят 4 файла: aa.txt, da.txt, na.txt, aab.txt. Если убрать ? и оставить маску a*.txt, подходящих файлов станет два: aa.txt и aab.txt.

Главное

  • * — любая последовательность символов, ? — ровно один символ.
  • Остальные символы, включая точку, сравниваются буквально.
  • Маска переводится в регулярное выражение с привязкой к началу и концу строки.
  • Регистр учитывается или игнорируется по переключателю, флаг i отключает его.