REGCMP(3X)                                           REGCMP(3X)
НАЗВАНИЕ
regcmp, regex - компиляция и выполнение регулярного вы-
        ражения
СИНТАКСИС
       |char *regcmp (string1 [, string2, ...], (char *) 0)
       |char *string1, *string2, ...;
       |
       |char *regex (re, subject [, ret0, ...])
       |char *re, *subject, *ret0, ...;
       |
       |extern char *__loc1;
ОПИСАНИЕ
Функция regcmp компилирует регулярное выражение, состо-
        ящее из конкатенированных аргументов, и возвращает ука-
        затель на результат компиляции. Чтобы захватить  прост-
        ранство   для    результата,    используется    функция
        malloc(3C). Ответственность  за  освобождение  ставшего
        ненужным пространства, которое было выделено при помощи
        malloc, возлагается на пользователя.  Пустой  указатель
        NULL, возвращенный в качестве результата regcmp, свиде-
        тельствует о некорректности аргументов. Чтобы, в  общем
        случае,  устранить  необходимость вызова данной функции
        во время выполнения, написана команда regcmp(1).
                                                               
        Функция regex сопоставляет скомпилированный  образец  с
        цепочкой символов subject. Regex возвращает пустой ука-
        затель  NULL  в случае неудачи или указатель на символ,
        следующий после сопоставленного фрагмента, в случае ус-
        пеха. Если нужно получить больше  выходной  информации,
        следует передать дополнительные аргументы. В глобальной
        переменной  __loc1  возвращается  указатель на позицию,
        где сопоставление началось. Функции regcmp и regex поч-
        ти впрямую заимствованы из редактора ed(1); синтаксис и
        семантика регулярных выражений изменены  незначительно.
        Ниже  перечислены допустимые символы и описана их трак-
        товка.
                                                               
       |[ ]  *  .  ^                                           
             Эти  символы  сохраняют  свой  обычный  для  ed(1)
             смысл.                                            
                                                               
        $    Этот символ сопоставляется с концом цепочки симво-
             лов; \n сопоставляется с символом перевода строки.
                                                               
        -    Минус в квадратных скобках обозначает "от  и  до".
             Например,  запись [a-z] эквивалентна [abcd...xyz].
             Минус может встречаться сам по себе,  только  если
             он  является первым или последним символом. Напри-
             мер, класс символов [ ]-] сопоставляется с  симво-
             лами ] и -.                                       
                                                               
        +    Плюс, следующий за регулярным выражением,  обозна
             чает "один или более раз". Например, запись [0-9]+
             эквивалентна [0-9][0-9]*.                         
                                                               
       |{m}  {m,}  {m, u}                                      
             Целые  значения,  заключенные  в  фигурные скобки,
             указывают, сколько раз  должно  применяться  пред-
             шествующее регулярное выражение. Минимальное число
             применений  задается  величиной  m, максимальное -
             величиной u, которая должно быть меньше, чем  256.
             Если  указано  только значение {m}, оно обозначает
             точное число применений регулярного выражения. За-
             пись {m,} эквивалентна {m, бесконечность}.  Опера-
             ции + и * эквивалентны соответственно {1,} и {0,}.
                                                               
        ( ... )$n                                              
             Значение регулярного выражения  в  скобках  должно
             быть возвращено. Значение заносится в (n+1)-й  ар-
             гумент после subject. В текущей версии допускается
             максимум 10  таких  регулярных  выражений.  Данные
             присваивания выполняются безусловно.              
                                                               
        ( ... )         
             Круглые скобки используются для группировки.  Опе-
             ратор (например, *, +, { }) может работать с одним
             символом или с регулярным выражением,  заключенным
             в скобки. Например, (a*(cb+)*)$0.
        Все определенные выше символы по необходимости  тракту-
        ются особым образом. Чтобы обозначать самих  себя,  они
        должны экранироваться символом \.                      
                                                               
ПРИМЕРЫ                                                        
        1.  В  данном примере будет сопоставлен символ перевода
        строки, стоящий в начале цепочки символов,  на  которую
        указывает аргумент cursor:                             
                                                               
            |char *cursor, *newcursor, *ptr;                   
            |  ...
            |newcursor =
            |  regex((ptr = regcmp("^\n", (char *)0)), cursor);
            |free (ptr);                                       
                                                               
        2.  В следующем примере будет сопоставлена цепочка сим-
        волов "Testing3" и возвращен адрес после последнего со-
        поставленного  символа  (адрес  символа  "4").  Цепочка
        "Testing3" будет скопирована в массив ret0.
                                                               
            |char ret0 [9];                                    
            |char *newcursor, *name;                           
            |  ...                            
            |name  =  regcmp ("([A-Za-z][A-za-z0-9]{0,7})$0",
            |                (char *) 0);                      
            |newcursor = regex (name, "012Testing345", ret0);  
                                         
        3. Предварительно скомпилированное регулярное выражение
        из файла file.i [см. regcmp(1)] будет применено к аргу-
        менту string:                                          
                                                               
            |#include "file.i"    
            |char *string, *newcursor;
            |   ...                         
            |newcursor = regex (name, string);
                        
ФАЙЛЫ                                                          
        /usr/lib/libPW.a        Библиотека, в которой  хранятся
                                описанные функции.
                                                               
СМ. ТАКЖЕ                                                      
        malloc(3C).                                            
        ed(1), regcmp(1) в Справочнике пользователя.
СЮРПРИЗЫ                   
        При работе программы пользователя может произойти пере-
        полнение памяти, если regcmp вызывается многократно без
        освобождения областей памяти, ставших ненужными.