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.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Сбор произвольных данных через ds_raw

Из книги Документация NetAMS автора Автор неизвестен

Сбор произвольных данных через ds_raw Начиная с версии NeTAMS 3.4.0 (build 3018) появилась возможность учета произвольных данных с использованием сервисаservice data–source 3type rawКоманда:rawdata unit name XXX policy YYY in AAA out BBB {as–is|incremental} [time]Где XXX и YYY — имена юнита и политикиAAA и BBB — значения в байтах,


Обновление строк

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю


Построение произвольных поверхностей

Из книги ArchiCAD 11 автора Днепров Александр Г

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


Универсализация (Genericity)

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Универсализация (Genericity) В описании STACK[G] именем G обозначен произвольный, не определяемый тип. G называется формальным родовым параметром для типов элементов АТД STACK, а сам STACK называется родовым или универсальным АТД. Механизм, допускающий такие параметризованные


Лекция 10. Универсализация

Из книги О чём не пишут в книгах по Delphi автора Григорьев А. Б.

Лекция 10. Универсализация Слияние двух концепций - модуля и типа - позволило разработать мощное понятие класса, послужившее основой ОО-метода. Уже в таком виде оно позволяет делать многое. Однако для достижения наших целей - расширяемости, возможности повторного


У10.1 Ограниченная универсализация

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

У10.1 Ограниченная универсализация Это упражнение немного специфично - оно ставит вопрос, детальный ответ на который будет дан позднее в этой книге. Его цель - дать возможность сравнить ваше решение с решением, предложенным в книге. Оно особенно полезно, если вы не знакомы с


Движения произвольных фигур

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов. автора Дронов Владимир

Движения произвольных фигур Чтобы понять необходимость в отложенных процедурах и классах, снова рассмотрим иерархию фигур FIGURE. Рис. 14.8.  Снова иерархия FIGUREНаиболее общим понятием здесь является FIGURE. Основываясь на механизмах полиморфизма и динамического связывания,


2.9. Форматирование строк

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

2.9. Форматирование строк В Ruby, как и в языке С, для этой цели предназначен метод sprintf. Он принимает строку и список выражений, а возвращает строку. Набор спецификаторов в форматной строке мало чем отличается от принятого в функции sprintf (или printf) из библиотеки С.name = "Боб"age =28str =


Разрыв строк

Из книги C++. Сборник рецептов автора Диггинс Кристофер

Разрыв строк Мы совсем забыли поместить на Web-страницы сведения об авторских правах их разработчика, т. е. о нас. Давайте сделаем это. Поместим их в самый низ Web- страниц посредством изученного в главе 2 тега <ADDRESS>:<ADDRESS>Все права защищены. Читатели, 2010 год.</ADDRESS>Все


Нумерация на произвольных уровнях

Из книги Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil автора Ковязин Алексей Николаевич

Нумерация на произвольных уровнях Иногда может потребоваться просто подсчитать узлы определенного типа независимо от их уровня в документе. Например, в различных местах иерархии документа не исключено наличие нескольких элементов <NAME>, и вам может быть нужно просто


14.5. Универсализация файловых имен

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

14.5. Универсализация файловых имен Большинство пользователей Linux принимают как должное то, что запуск ls *.с не сообщает сведения о файле в текущем каталоге, именем которого является *.с. Вместо этого они ожидают увидеть список всех файлов в текущем каталоге, имена которых


14.5.2. Внутренняя универсализация

Из книги автора

14.5.2. Внутренняя универсализация Если необходимо универсализировать несколько файловых имен, запуск нескольких подоболочек с помощью popen() будет неэффективным. Функция glob() позволяет универсализировать имена файлов без запуска каких-либо подпроцессов, однако за счет


11.5.3. Слияние строк

Из книги автора

11.5.3. Слияние строк Наличие опции -s заставляет команду paste работать немного по–другому: для каждого входного файла она выполняет слияние всех его строк, записывая результат в выходной поток. Представленная ниже команда сначала отображает все имена служащих, а затем — их