# RegExpControl

Функция `RegExpControl` позволяет управлять Регулярными выражениями.

    intptr_t WINAPI RegExpControl(
      HANDLE hHandle,
      enum FAR_REGEXP_CONTROL_COMMANDS Command,
      intptr_t Param1,
      void *Param2
    );

### Параметры

hHandle
Смотрите описание `Command`.
Command
Может быть одним из следующих значений (перечисление FAR_REGEXP_CONTROL_COMMANDS):

Команда | Описание
--- | ---
RECTL_CREATE | Создаёт структуры под Регулярные выражения. `hHandle` должен быть установлен в значение `NULL`. `Param1` не используется. `Param2` - указатель типа `HANDLE`, в который запишется созданный описатель Регулярных выражений. Функция при неудаче вернёт `FALSE`.
RECTL_FREE | Освобождает память занятую при создании Регулярных выражений. `hHandle` - описатель Регулярных выражений, созданный по команде `RECTL_CREATE`. `Param1` не используется. `Param2` не используется. Функция возвращает `TRUE`.
RECTL_COMPILE | Инициализирует Регулярные выражения. `hHandle` - описатель Регулярных выражений, созданный по команде `RECTL_CREATE`. `Param1` не используется. `Param2` - указатель на строку с Регулярными выражениями. Функция возвращает `TRUE` при удачной компиляции строки.
RECTL_OPTIMIZE | Оптимизирует Регулярные выражения после инициализации, применяется после `RECTL_COMPILE`. `hHandle` - описатель Регулярных выражений, созданный по команде `RECTL_CREATE`. `Param1` не используется. `Param2` не используется. Функция возвращает `TRUE` при удачной оптимизации.
RECTL_MATCHEX | Сопоставляет Регулярное выражение строке. `hHandle` - описатель Регулярных выражений, созданный по команде `RECTL_CREATE`. `Param1` не используется. `Param2` указатель на заполненную структуру RegExpSearch. Функция возвращает `TRUE` при удачной операции сопоставления.
RECTL_SEARCHEX | Ищет в строке подстроки заданные Регулярным выражением. `hHandle` - описатель Регулярных выражений, созданный по команде `RECTL_CREATE`. `Param1` не используется. `Param2` указатель на заполненную структуру RegExpSearch. Функция возвращает `TRUE`, если удалось найти подстроки.
RECTL_BRACKETSCOUNT | Количество скобок () в Регулярном выражении. `hHandle` - описатель Регулярных выражений, созданный по команде `RECTL_CREATE`. `Param1` не используется. `Param2` не используется. Функция возвращает количество скобок в Регулярном выражении, при этом всё выражение целиком интерпретируется в качестве первой скобки.

Param1
Указывает на параметры1 команды. Смотрите описание `Command`.
Param2
Указывает на параметры2 команды. Смотрите описание `Command`.

### Возвращаемое значение

Смотрите описание `Command`

### Пример

    HANDLE re;
    if (Info.RegExpControl(0,RECTL_CREATE,0,&re))
    {
      if (Info.RegExpControl(re,RECTL_COMPILE,0,(void*)L"/[0-9]+/"))
      {
        int brackets=Info.RegExpControl(re,RECTL_BRACKETSCOUNT,0,0);

        FILE *log=fopen("c:\\plugins.log","at");
        fprintf(log,"br: %d\n",brackets);
        fclose(log);

        if (!brackets)
        {
          Info.RegExpControl(re,RECTL_FREE,0,0);
          return;
        }

        RegExpMatch *match=(RegExpMatch*)malloc(brackets*sizeof(RegExpMatch));

        RegExpSearch search={
          L"test 123 test",
          0,
          13,
          match,
          brackets,
          0
        };

        if (Info.RegExpControl(re,RECTL_SEARCHEX,0,&search))
        {
          FILE *log=fopen("c:\\plugins.log","at");
          fprintf(log,"found: %d %d\n",match[0].start,match[0].end);
          fclose(log);
        }
        else
        {
          FILE *log=fopen("c:\\plugins.log","at");
          fprintf(log,"not found\n");
          fclose(log);
        }
        free(match);
      }
      Info.RegExpControl(re,RECTL_FREE,0,0);
    }

Смотрите также:
PanelControl