РУҚА
Тапсырма № 13 · ОГЭ

Іздеу файлов по маске

Алгоритм проверки имён файлов на соответствие шаблону с символами «*» и «?»
6 мин чтенияҚиындық: Обновлено 29 қыркүйек 2026

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

Что такое маска имени файла

Сначала повторите, что такое шаблон имени файла. Маска — это шаблон, в котором часть символов задана точно, а часть обозначена специальными символами — метасимволами. Обычно проверяется всё имя файла вместе с расширением, если расширение явно включено в маску.

D
Маска имени файла

Маска — строка, задающая условие отбора файлов. Обычный символ маски должен совпасть с таким же символом имени, а метасимвол задаёт допустимый набор символов.

В школьных задачах используются два основных метасимвола. Звёздочка «*» заменяет любую последовательность символов, в том числе пустую последовательность. Вопросительный знак «?» заменяет ровно один любой символ.

ОбозначениеЧто заменяетПример
обычный символтолько сам себяa совпадает с a
?ровно один символfile?.txt: file1.txt
*ноль или больше символов*.txt: все файлы с расширением .txt
T
Главное правило соответствия

Имя файла соответствует маске тогда и только тогда, когда всю строку имени можно получить из маски заменой каждого «?» одним символом, а каждой «*» — последовательностью из нуля или более символов.

\[?\;\to\;\text{ровно 1 символ},\qquad *\;\to\;\text{0, 1, 2, \ldots символов}\]

Алгоритм проверки маски

Проверяйте имя слева направо. Не пытайтесь сразу определить, что означает вся маска: особенно при нескольких звёздочках это приводит к ошибкам.

  1. Запишите имя файла полностью: основное имя, точку и расширение.
  2. Разделите маску на обычные символы и метасимволы.
  3. Сопоставляйте обычные символы с символами имени в тех же местах.
  4. Каждый «?» зачеркните вместе ровно с одним символом имени.
  5. Для «*» мысленно выделите столько символов, сколько нужно для совпадения оставшейся части маски. Звёздочка может не поглотить ни одного символа.
  6. Проверьте конец строки: после обработки маски не должно остаться лишних символов имени.

Если маска начинается с точного фрагмента, имя обязано начинаться с него. Если маска заканчивается точным фрагментом, имя обязано заканчиваться им. Например, в маске doc*.pdf расширение .pdf является обязательным, а между doc и .pdf может находиться любая последовательность символов, включая пустую.

Удобный приём

Сначала проверьте буквенные фрагменты и расширение, а уже затем определяйте, какие символы поглощают «*» и «?». Так проще быстро отсеять неподходящие имена.

Микро-проверка

Какие имена соответствуют маске report?.txt?

Как работать со звёздочкой

Звёздочка может соответствовать любой последовательности, поэтому одно и то же имя иногда допускает несколько вариантов сопоставления. Это не мешает проверке: достаточно найти хотя бы один правильный способ сопоставить всю маску и имя.

Рассмотрим маску a*b*c. Файл abbbc подходит: первая «» может быть пустой, вторая «» — строка bb. Файл ac также подходит: обе звёздочки могут быть пустыми. Файл abbd не подходит, потому что обязательный последний символ маски — c, а имя заканчивается на d.

T
Границы действия «*»

Если после «*» в маске есть точный фрагмент, этот фрагмент должен встретиться в имени после уже сопоставленной части. Звёздочка поглощает только те символы, которые не нужны для последующего совпадения.

Особенно внимательно проверяйте расширение. Маска *.docx подходит к report.docx и к .docx, если в используемой модели имя может быть пустым до точки. Она не подходит к report.doc и report.docx.bak. Для отбора файлов только по расширению полезно обратиться к странице отбор файлов по расширению.

Разобранный пример экзаменационного типа

№
Тапсырма

Дана маска \(A??B*.txt\). Какие из имён подходят: A12B.txt, A12BC.txt, A1B.txt, A123B7.txt, AB12.txt?

В маске есть обязательная начальная буква A, затем два любых символа, затем B, произвольная последовательность символов и точное расширение .txt.

1
Сначала выделим обязательные части маски.
\(\displaystyle A\;??\;B\;*\;.txt\)
2
Для A12B.txt после A идут два символа 1 и 2, затем B; звёздочка пуста.
\(\displaystyle A\;12\;B\;\varnothing\;.txt\)
3
Для A12BC.txt после A идут 1 и 2, затем B; звёздочка поглощает C.
\(\displaystyle A\;12\;B\;C\;.txt\)
4
Для A1B.txt после A находится только один символ 1, а нужно два.
\(\displaystyle A\;1\;B\;.txt\quad\text{— не подходит}\)
5
Для A123B7.txt после A находятся 1 и 2, затем ожидается B, но встречается 3.
\(\displaystyle A\;12\;3\;B7\;.txt\quad\text{— не подходит}\)
6
Для AB12.txt после A нет двух символов перед обязательной B: сразу идёт B.
\(\displaystyle A\;B\;12\;.txt\quad\text{— не подходит}\)
№
Жауап к примеру

Подходят только A12B.txt и A12BC.txt. Важно: «?» потребовал ровно два символа, а «*» смог соответствовать пустой последовательности или символу C.

Маска как условие отбора

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

  • Для каждого имени проверено расширение.
  • Количество символов для каждого «?» посчитано точно.
  • Для каждой «*» разрешена пустая последовательность.
  • Все обычные символы стоят в правильном порядке.
  • После сопоставления не осталось непроверенных символов имени.

Если нужно найти число файлов, удобно составить таблицу: в первой колонке имя, во второй — подходит или нет, в третьей — краткая причина. Например, причиной отказа может быть «неверное расширение», «не хватает символа для ?» или «нарушен порядок букв».

!
Частые ошибки

1. Считать «» одним символом. На самом деле она заменяет строку любой длины, включая пустую. 2. Разрешать «?» заменить ноль или несколько символов. Это неверно: «?» заменяет ровно один символ. 3. Проверять только основное имя и забывать расширение. 4. Считать, что символы должны совпадать только по позиции, даже если перед ними стоит «». 5. Игнорировать регистр, если условие тапсырма явно считает прописные и строчные буквы различными.

Практика на скорость и точность

Для коротких масок полезно сначала оценить минимальную длину подходящего имени. Каждый обычный символ и каждый «?» уже задают один обязательный символ; «*» длину не увеличивает, потому что может быть пустой. Например, минимальная длина маски ab?*cd равна 5: a, b, один символ для ?, c и d.

\[L_{\min}=N_{\text{обычных символов}}+N_{?}\]

Эта оценка не заменяет полную проверку, но быстро обнаруживает невозможные варианты. Кроме длины, проверяйте порядок фиксированных фрагментов: файл достаточной длины всё равно может не подходить.

Запомните

«?» — один символ; «*» — любая последовательность, включая пустую. Обычные символы совпадают буквально, а вся строка имени должна быть использована целиком.

Q
Жылдам тест по теме

Быстрая проверка

~ 2 мин4 вопроса
Вопрос 1 / 4
Вопрос 1 из 4 · звёздочка
Подходит ли file.txt под маску *.txt?
Главное за минуту

Главное

  • Маска задаёт условие соответствия полного имени файла, обычно вместе с расширением.
  • «?» заменяет ровно один символ, а «*» — ноль или больше символов.
  • Проверяйте имя слева направо и не нарушайте порядок обычных символов.
  • Для «*» выбирайте такую последовательность, чтобы совпала оставшаяся часть маски; пустая последовательность разрешена.
  • В задачах на количество файлов проверяйте каждое имя отдельно и фиксируйте причину отказа.