Троан Эрик В.
Шрифт:
23.2.1. Регулярные выражения в Linux
Существуют две разновидности регулярных выражений: базовые регулярные выражения (basic regular expression — BRE) и расширенные регулярные выражения (extended regular expression — ERE). Они соответствуют (в первом приближении) командам grep и egrep. Описание каждой разновидности регулярных выражений можно найти на man-странице grep, в стандарте POSIX.2 (IEEE, 1993), в [32], а также в других источниках, поэтому здесь мы не станем описывать их синтаксис, а рассмотрим только интерфейс функции, с помощью которой вы сможете применять регулярные выражения в своих программах.
23.2.2. Сопоставление с регулярными выражениями
Стандарт POSIX определяет четыре функции обработки регулярных выражений.
Прежде чем сравнивать строку с регулярным выражением, нужно выполнить ее компиляцию с помощью функции
Аргумент
REG_EXTENDED | Вместо синтаксической структуры BRE будет использоваться структура ERE. |
REG_ICASE | Не будет учитываться регистр. |
REG_NOSUB | Не будут выделяться подстроки. Функция regexec будет игнорировать аргументы nmatch и pmatch . |
REG_NEWLINE | Если значение REG_NEWLINE не будет задано, то символ новой строки будет обрабатываться точно так же, как и любой другой символ. Символы ^ и $ соответствуют только началу и концу всей строки, а не соседним символам новой строки. Если значение REG_NEWLINE будет задано, то результат будет таким же, как и в случае использования grep , sed и других стандартных системных инструментальных средств; символ ^ осуществляет привязку к началу строки и символу, следующему после символа новой строки (фактически он соответствует строке нулевой длины, следующей за символом новой строки); $ осуществляет привязку к концу строки и символу, следующему после символа новой строки (фактически, он соответствует строке нулевой длины, предшествующей символу новой строки); символ . не соответствует символу новой строки. |
Ниже представлен пример типичного вызова функции.
Данное расширенное регулярное выражение находит строки в файле, которые не включены в комментарии, или которые, по крайней мере, частично, заключены в комментарии посредством символов
Даже если вы компилируете выражение, которое, по вашему мнению, является нормальным, вам все равно необходимо проверить его на наличие ошибок. Функция
Функция
REG_NOTBOL | Первый символ строки не будет соответствовать символу ^ . Любой символ, следующий за символом новой строки, будет соответствовать при том условии, что в вызове функции regcomp будет задано значение REG_NEWLINE . |
REG_NOTEOL | Последний символ строки не будет соответствовать символу $ . Любой символ, предшествующий символу новой строки, будет соответствовать символу $ при том условии, что в вызове функции regcomp будет задано значение REG_NEWLINE . |
Массив структур
Первый элемент