Используя специальные символы, можно формировать шаблоны имен файлов.
* | соответствует любой (возможно, пустой) последовательности символов |
? | соответствует точно одному любому символу |
[ ] | используются для группирования символов в наборы. Наборы могут задаваться: - явным перечислением символов, без указания разделителей между ними, например [atz56,=] – символ соответствует либо одной из трех букв a, t и z, либо одной из цифр 5 и 6, либо одному из спецсимволов запятая и знак равенства - путем указания диапазона, например [a-z] – символ соответствует строчной букве от а до z - комбинацией этих способов, например [0-9ij] – символ соответствует либо цифре, либо одной из букв i или j |
! | используется для отрицания набора символов, то есть имя файла не должно содержать указанных символов |
Примеры:
f* | соответствует файлам с именами, начинающимися с буквы f |
*f* | соответствует файлам с именами, содержащими букву f |
program.? | соответствует файлам с именами program, имеющими однобуквенные расширения |
??[a-d]* | соответствует файлам с именами, в которых третьей буквой является a, b, c или d |
[!A-Z]*[2468] | соответствует файлам с именами, не начинающимися с большой буквы и заканчивающимися на цифру 2, 4, 6 или 8 |
Если в имя файла должен входить какой-либо спецсимвол, то при указании шаблона этот спецсимвол необходимо предварять с помощью обратного слэша («\»), или экранировать, например:
[AEIOUYaeiouy]\*??? | соответствует файлам с именами, начинающимися с гласной буквы, за которой следует символ *, а за ней – три произвольных символа |
При использовании диапазонов символов следует учитывать, что они могут зависеть от выбранных настроек локализации. Например, диапазон [b-e] означает символы от b до е включительно. В английском языке, где сортировка букв идет по порядку (ABC…XYZabc…xyz), указанному набору соответствует набор символов b, c, d, e. Согласно правилам русского языка, сортировка тех же символов идет в другом порядке (аАбБвВ…эЭюЮяЯaAbBcC…xXyYzZ) и тому же диапазону соответствуют символы b, B, c, C, d, D, е. Для решения таких проблем имеются объявления некоторых классов и категорий символов:
[:upper:] | Латинские буквы верхнего регистра |
[:lower:] | Латинские буквы нижнего регистра |
[:alpha:] | Латинские буквы верхнего и нижнего регистров |
[:alnum:] | Латинские буквы верхнего и нижнего регистров, цифры |
[:digit:] | Цифры |
[:xdigit:] | Шестнадцатеричные цифры |
[:punct:] | Знаки пунктуации |
[:blank:] | Пробел и табуляция |
[:space:] | Символы пропуска (пробел, табуляция, перевод каретки, перевод строки и т.п.) |
[:cntrl:] | Управляющие символы (клавиша [Ctrl]+символ) |
[:graph:] | Символы печати |