Введение

Шаблоны, используемые в компьютерном программировании

В компьютерном программировании шаблоны glob (/g//l//ɒ//b/) задают наборы имен файлов с использованием подстановочных символов. Например, команда Unix Bash shell mv *.txt textfiles/ перемещает все файлы с именами, заканчивающимися на .txt, из текущего каталога в каталог textfiles. Здесь * – это подстановочный символ, а *.txt – шаблон glob. Подстановочный символ * обозначает "любую строку любой длины, включая пустую, но исключая символы разделителя пути (/ в Unix и \ в Windows)". Другой распространенный подстановочный символ – знак вопроса (?), который обозначает один символ. Например, mv ?.txt shorttextfiles/ переместит все файлы с именем, состоящим из одного символа, за которым следует .txt, из текущего каталога в каталог shorttextfiles, а ?? .txt будет соответствовать всем файлам, имя которых состоит из двух символов, за которыми следует .txt. Помимо сопоставления имен файлов, шаблоны glob также широко используются для сопоставления произвольных строк (сопоставление с использованием подстановочных символов). В этом качестве распространенным интерфейсом является fnmatch.

Происхождение

Команда glob, сокращение от global, возникла в самых ранних версиях Unix, разработанных в Bell Labs. Позже эта функциональность была реализована как функция библиотеки C, glob, используемая такими программами, как командная оболочка. Обычно она определяется на основе функции fnmatch, которая проверяет, соответствует ли строка заданному шаблону. Программа, использующая эту функцию, затем может перебирать последовательность строк (обычно имён файлов), чтобы определить, какие из них соответствуют шаблону. Обе функции являются частью стандарта POSIX: функции, определённые в POSIX.1 начиная с 2001 года, и синтаксис, определённый в POSIX.2. Идея выделения отдельной функции для сопоставления началась с wildmat (сопоставление подстановочных знаков), простой библиотеки для сопоставления строк с шаблонами Bourne Shell. Традиционно, шаблоны glob не соответствуют скрытым файлам в виде Unix dotfiles; для их сопоставления шаблон должен явно начинаться с точки. Например, * соответствует всем видимым файлам, а .* – всем скрытым файлам.

Синтаксис

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

| Подстановочный знак | Описание | Пример совпадений | Пример несовпадений |
|---|---|---|---|
| | Соответствует любому количеству любых символов, включая отсутствие символов. | , , или | , , или |
| | Соответствует любому отдельному символу. | , , или | |
| [] | Соответствует одному символу, указанному в скобках. | или , или | , |
| [a-z] | Соответствует одному символу из диапазона (зависит от локали), указанного в скобках. | , , до , или | , |

Обычно символ разделителя пути ( на Linux/Unix, MacOS и т.д. или на Windows) не будет соответствовать ничему. Некоторые оболочки, такие как Bash, предоставляют функциональность, позволяющую пользователям обходить это ограничение.

Реализация в виде регулярных выражений

Оригинальная реализация автоматической настройки прокси Mozilla, предоставляющая функцию сопоставления glob для строк, использует реализацию RegExp на основе замены, как описано выше. Синтаксис с использованием квадратных скобок случайно поддерживается регулярными выражениями в данном примере. Python's fnmatch использует более сложный процесс для преобразования шаблона в регулярное выражение.

Другие варианты реализации

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

В C# доступно несколько библиотек через NuGet, таких как Glob. В SQLite есть функция GLOB. Tcl включает в себя механизм подстановки шаблонов.