Открыть сервис

Wildcard: понятие, виды и применение

Wildcard (от англ. wildcard — «дикая карта», также «шаблонный символ», «символ подстановки») — в информатике и теории формальных языков особый символ или последовательность символов, который в шаблоне поиска или сопоставления обозначает произвольный (один или несколько) символ, либо произвольную их последовательность. Wildcard-символы используются для создания гибких шаблонов, которые могут соответствовать сразу множеству различных строк, имён файлов, URL-адресов или других текстовых данных.

Происхождение термина

Термин происходит от карточной игры: «джокер» (дикая карта) в колоде может заменять любую другую карту. По аналогии, символ подстановки в компьютерном шаблоне заменяет собой любой символ или группу символов. В русскоязычной технической литературе также используются названия «символ-шаблон», «подстановочный знак» и просто «звёздочка» (по наиболее распространённому символу «*»).

Основные виды wildcard-символов

Наиболее распространёнными являются два базовых символа, хотя их конкретная семантика может различаться в разных системах.

Звёздочка (*)

Символ (астериск) в большинстве систем обозначает произвольное количество любых символов, включая ноль символов. Например, шаблон .txt соответствует любым файлам с расширением .txt, а шаблон report — любым строкам, содержащим слово «report» в любом месте.

Вопросительный знак (?)

Символ ? обозначает ровно один произвольный символ. Например, шаблон file?.doc соответствует файлам file1.doc, fileA.doc, но не соответствует file10.doc (так как там два символа после file).

Символьные классы (квадратные скобки)

Во многих системах (в частности, в командных оболочках Unix и Windows) поддерживаются символьные классы, задаваемые в квадратных скобках. Например, [abc] означает один символ — либо a, либо b, либо c. Диапазоны задаются через дефис: [0-9] — любая цифра, [a-z] — любая строчная латинская буква. Знак ^ в начале класса (в некоторых системах !) означает отрицание: [^0-9] — любой символ, кроме цифры.

Отличия от регулярных выражений

Wildcard-шаблоны часто путают с регулярными выражениями (regex), однако это разные инструменты. Регулярные выражения — значительно более мощный и сложный язык поиска, где символы и ? имеют иной смысл: в regex означает «ноль или более повторений предыдущего элемента», а ? — «ноль или одно повторение». Wildcard-шаблоны, напротив, просты, интуитивно понятны и предназначены для быстрого поиска по именам файлов и простым строкам. Во многих современных языках программирования (например, в Python) существуют отдельные функции для работы с wildcard-шаблонами (модуль fnmatch), которые транслируют их в регулярные выражения «под капотом».

Применение в операционных системах

Командные оболочки

В командных оболочках Unix (bash, zsh, sh) и Windows (cmd, PowerShell) wildcard-символы используются для групповых операций с файлами: удаления, копирования, перемещения, вывода списка. Например, команда ls *.jpg выведет все файлы с расширением .jpg в текущем каталоге. Процесс подстановки wildcard-символов в список реальных файлов называется «раскрытием шаблона» (globbing).

Поиск файлов

В графических интерфейсах и поисковых системах операционных систем wildcard-символы позволяют уточнить запрос. Например, в Windows поиск *.pdf найдёт все PDF-файлы, а отчет? — файлы с именем «отчет1», «отчетA» и т.п.

Применение в базах данных

В языке SQL оператор LIKE использует собственные wildcard-символы: % (аналог — любая последовательность символов) и _ (аналог ? — ровно один символ). Например, запрос SELECT FROM users WHERE name LIKE 'Ан%' вернёт всех пользователей, чьи имена начинаются с «Ан». В некоторых СУБД (например, PostgreSQL) дополнительно поддерживается символ * в полнотекстовом поиске.

Применение в сетевых технологиях

В DNS-записях wildcard-записи (wildcard DNS record) позволяют задать ответ для всех поддоменов определённого уровня. Например, запись *.example.com будет обрабатывать запросы к mail.example.com, blog.example.com и любым другим поддоменам. Это широко используется для масштабирования инфраструктуры и упрощения конфигурации.

В межсетевых экранах и прокси-серверах wildcard-шаблоны применяются для задания правил фильтрации по доменным именам и IP-адресам.

Применение в программировании

Языки программирования

Многие языки имеют встроенную поддержку wildcard-сопоставления. В Python модуль fnmatch предоставляет функции fnmatch() и filter(). В Java класс File имеет метод listFiles(FileFilter), а в .NET используется класс WildcardPattern. В языках Go и Rust существуют сторонние библиотеки для этой задачи.

Системы контроля версий

В файлах .gitignore (Git) и .hgignore (Mercurial) wildcard-шаблоны определяют, какие файлы и каталоги не должны отслеживаться системой. Например, шаблон *.log исключает все файлы журналов, а build/ — каталог сборки.

Сборка проектов

Инструменты сборки (Make, Gradle, npm) используют wildcard-символы для указания наборов исходных файлов. Например, в Gradle конструкция src/**/*.java означает все Java-файлы во всех подкаталогах каталога src (двойная звёздочка ** обозначает произвольную вложенность каталогов).

Особенности и ограничения

Синтаксис wildcard-символов не стандартизирован и различается между системами. Так, в SQL вместо используется %, а символ в некоторых поисковых системах (например, в Google) означает «любое слово». В командной строке Windows символ * не соответствует файлам, начинающимся с точки (скрытым), тогда как в Unix — соответствует. Двойная звёздочка ** в некоторых системах (например, в bash при включённой опции globstar или в .gitignore) обозначает рекурсивный обход всех подкаталогов.

Важно помнить, что wildcard-символы не работают внутри кавычек в некоторых командных оболочках и могут требовать экранирования (например, обратным слэшем в Unix или знаком ^ в Windows) для передачи буквального значения символа * или ?.

Интересные факты

В карточных играх wildcard-карта (джокер) появилась в колодах в XIX веке в США. В компьютерную эпоху термин перекочевал сначала в документацию по операционной системе Unix (1970-е годы), а затем и во все остальные области. В некоторых контекстах (например, в спортивных турнирах) «wildcard» означает специальное приглашение участнику, не прошедшему квалификацию, но это значение не связано с информационными технологиями.

Найди прибыльный бизнес на BFOmetr.ru

БАБЛО →