Что нового

[Новая функция] Предкомпиляция регулярного выражения (StringRegExpCompile)

amel27

Продвинутый
Сообщения
146
Репутация
55
не секрет, что применение регулярных выражений делится на два этапа:

- предкомпиляция выражения;
- выполнение скомпилированного выражения с целевым текстом

каждый из этих этапов отнимает драгоценные "тики" процессора... при разборе больших текстов время компиляции несущественно, но для коротких строк это время значительно превосходит время выполнения и тут уже не поможет никакая оптимизация регулярного выражения... ситуация усугубляется для случая, когда одно выражение применяется в цикле (например, по массиву строк) - каждый вызов приводит к ненужной перекомпиляции одного и того же выражения

отсюда возникает потребность в ф-ции предварительной компляции выражения в хэндл, который может затем применяться в StringRegExp/StringRegExpReplace наравне с самим выражением, вполне вероятно потребуется парная ф-ция закрытия хэндла/освобождения памяти

как следует из PCRE man page, движок поддерживает эту возможность


Добавлено:
Сообщение автоматически объединено:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 471
Репутация
2 401
Супер, переведу на Английский и буду репортить, это действительно поможет ускорить обработку р.выражений.
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
amel27, если не секрет, на чем сидел до AutoIt? :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 471
Репутация
2 401
It is not a secret that the use of regular expressions is divided into two phases:

- Expression precompilation;
- Execution of compiled expression with target text

Each of these phases takes precious time (processor ticks)... when dealing with large texts, compilation time is unimportant, but for short lines this time greatly exceeds the execution time, and any kind of regular expression optimization will not help here... the situation is exacerbated for the case when one expression is used in the cycle loop (for example, an array of lines) - each call leads to unnecessary recompilation of the same expression.
Hence the need for a function to pre-compile the expression in the handle, which can then be applied to StringRegExp/StringRegExpReplace on a par with the very expression, most likely it will require a steam function to close the handle / free memory.

Following the PCRE man page, the engine supports this possibility.
Отправлять?

P.S
Только вот как тикет назвать?
 
Автор
A

amel27

Продвинутый
Сообщения
146
Репутация
55
CreatoR сказал(а):
уфф, эт не ко мне - в буржуйском не силен... :(

CreatoR сказал(а):
Только вот как тикет назвать?
может, "RegExp precompile handling"?

Suppir сказал(а):
amel27, если не секрет, на чем сидел до AutoIt?
не секрет - форт, бейсик, с регулярками познакомился только в AutoIT
 
Верх