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);
}