RegExpControl
позволяет управлять Регулярными выражениями.
intptr_t WINAPI RegExpControl( HANDLE hHandle, enum FAR_REGEXP_CONTROL_COMMANDS Command, intptr_t Param1, void *Param2 );
Command
.Команда | Описание |
---|---|
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 не используется.Функция возвращает количество скобок в Регулярном выражении, при этом всё выражение целиком интерпретируется в качестве первой скобки. |
Command
.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); }