Книга: Разработка приложений в среде Linux. Второе издание
23.1. Универсализация произвольных строк
23.1. Универсализация произвольных строк
В главе 14 мы говорили о том, как с помощью функции glob()
производится универсализация имен файлов, однако пользователи, знакомые с возможностями универсализации, нередко пытаются применить их и к другим разновидностям строк. Функция fnmatch()
позволяет применять правила универсализации в отношении произвольных строк:
#include <fnmatch.h>
int fnmatch(const char * pattern, const char * string, int flags);
Предложенный шаблон является стандартным выражением универсализации с четырьмя специальными символами, за которые отвечает аргумент flags
.
* |
Соответствует любой строке, включая пустую. |
? |
Соответствует любому одиночному символу. |
[ |
Начинает список символов для сопоставления или, если следующим символом является ^ , то список символов для несовпадения. Весь список может совпадать, или не совпадать с одним символом. Список заканчивается знаком ] . |
Следующий символ будет интерпретироваться как литерал, а не как специальный символ. |
На результаты универсализации влияет аргумент flags
, и здесь он будет полезен, прежде всего, для универсализации имен файлов. Если вы не будете осуществлять универсализацию имен файлов, то вам, скорее всего, нужно будет присвоить аргументу flags
значение 0
.
FNM_NOESCAPE |
Обработка символа как обычного, а не специального символа. |
FNM_PATHNAME |
Символы / в строке string не сопоставляются с последовательностью * , ? , или даже [/] в шаблоне pattern ; сопоставление производится только с литералом, а не специальным символом / . |
FNM_NOESCAPE |
Первый символ . в шаблоне pattern соответствует символу . в строке string только в том случае, если он является первым символом в строке string или если задано значение FNM_PATHNAME , а символ . в string непосредственно следует за символом . |
Функция fnmatch()
возвращает нулевое значение, если шаблон соответствует строке, FNM_NOMATCH
, если шаблон не соответствует строке, или другое неопределенное значение в случае возникновения ошибки.
Пример использования функции fnmatch()
вы можете посмотреть в программе, приведенной в разделе 14.7.3 главы 14, в которой эта функция используется как часть простой реализации команды find
.
- Глава 23 Сопоставление строк
- Инструмент командной строки gbak
- Инструмент командной строки gfix
- Как выделить строку, столбец и ячейки
- Удобная операция объединения строк
- Работа со строками
- Преобразование строки в целое: stoi( )
- ПРИМЕР: СОРТИРОВКА СТРОК
- Запросы, подсчитывающие строки
- 2.9. Форматирование строк
- Можно ли сделать командную строку цветной (как в фильме «Матрица»)?
- Как открыть каталог с помощью командной строки?