RegExpControl

Programming Far Manager plugins

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 и Param2 = INVALID_HANDLE_VALUE.
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);
}
Смотрите также: