mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

      REGCMP(1)                                             REGCMP(1)

      НАЗВАНИЕ
              regcmp - компилятор регулярных выражений

      СИНТАКСИС
              regcmp  [-] файл ...

      ОПИСАНИЕ
              Команда regcmp в большинстве случаев устраняет  необхо-
              димость использования системного вызова  regcmp(3X)  из
              C-программ. Это уменьшает и время выполнения, и  размер
              программы. Команда regcmp компилирует регулярные  выра-
              жения, хранящиеся  в  файле,  и  помещает  результат  в
              файл.i. Если используется опция -, результат помещается
              в файл.c. Формат записей в файле - имя  (C-переменная),
              за которой следует один или более пробелов, а затем ре-
              гулярное выражение в двойных кавычках.

              Результат  regcmp  - текст на C. Скомпилированные регу-
              лярные  выражения  представляются  как  векторы  extern
              char.  Сформированные .i-файлы могут быть включены в C
              программы, а .c-файлы могут быть откомпилированы и  за-
              тем  загружены.  В  C-программе, которая использует ре-
              зультат команды regcmp, функция regex (abc,  line)  со-
              поставляет цепочку символов line с регулярным выражени-
              ем,  именуемым  abc.  Диагностические сообщения говорят
              сами за себя.

      ПРИМЕРЫ
              name     "([A-Za-z][A-Za-z0-9_]*)$0"

              abc      "\({0,1}([2-9][01][1-9])$0\){0,1} *"
                       "([2-9][0-9]{2})$1[ -]{0,1}"
                       "([0-9]{4})$2"

      СМ. ТАКЖЕ
              regcmp(3X).



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 вызывается многократно без
        освобождения областей памяти, ставших ненужными.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк