lxRegex открывает доступ к TXLSRegex — бэкенду с состоянием, который используют функции регулярных выражений калькулятора; обычным вызывающим книги достаточно API формул, описанных в разделе контекстное вычисление формул
Бэкенд использует поставляемую в комплекте 16-битную сборку PCRE2 10.49 с режимом UTF, автоматическими callout'ами бюджета и без JIT, со статическими объектами для Delphi и C++Builder на Windows и поддерживаемыми FPC на Linux x64 или macOS ARM64; неподдерживаемые целевые платформы сообщают xrsUnavailable
Каждый экземпляр владеет своим скомпилированным шаблоном, аллокатором и контекстами сопоставления; создавайте отдельный экземпляр для каждой одновременной операции и держите владельца callback'а бюджета живым, пока экземпляр не освобождён
| Публичное объявление | Контракт |
|---|---|
TXLSRegex.Create(ABudget: TXLSRegexBudget) | Выделяет контексты бэкенда и удерживает необязательный callback; передайте nil, если бюджет вызывающего не нужен, затем осматривайте результаты операций и Status |
TXLSRegex.Destroy | Освобождает скомпилированный шаблон, данные сопоставления и контексты; вызывающие обычно вызывают Free в блоке finally |
TXLSRegex.Compile(Pattern, IgnoreCase): Boolean | Компилирует UTF-16-шаблон и готовит его хранилище захвата, заменяя прежний шаблон; IgnoreCase включает регистронезависимое сопоставление PCRE2, а False оставляет сопоставление чувствительным к регистру |
TXLSRegex.Match(Text, Offset, NonemptyAtStart, out Offsets): Boolean | Требует успешной компиляции, ищет от смещения UTF-16 с отсчётом от нуля и возвращает отсоединённые смещения захвата; NonemptyAtStart=True запрашивает привязанное непустое совпадение в точном смещении, что позволяет продвигаться мимо пустого совпадения |
TXLSRegex.Replace(Text, Replacement, Occurrence, out Value): Boolean | Требует успешной компиляции и использует синтаксис замены PCRE2, включая нумерованные и именованные ссылки на группы захвата; ноль выбирает все совпадения, положительное значение — вхождение с отсчётом от 1 от начала, а отрицательное считает с конца |
TXLSRegex.Check(AWork, AExtraBytes): Boolean | Вызывает callback бюджета с текущим приращением работы и резидентными байтами бэкенда плюс AdditionalBytes и предлагаемыми дополнительными байтами; отрицательный учёт байтов, целочисленное переполнение или зафиксированный терминальный статус возвращает False |
TXLSRegex.Status: TXLSRegexStatus | Статус только для чтения для последней операции или терминального состояния бюджета/бэкенда; используйте его после возврата False операцией, чтобы отличить отсутствие совпадения от сбоя |
TXLSRegex.CaptureCount: Cardinal | Количество явных групп захвата, сообщённое последним скомпилированным шаблоном, только для чтения, без слота полного совпадения; используйте после успешного Compile |
TXLSRegex.AdditionalBytes: Int64 | Учёт временных буферов вызывающего, которые должны участвовать в каждой проверке бюджета, чтение и запись; по умолчанию ноль и сам память не выделяет |
TXLSRegexOffsets — динамический массив NativeUInt с двумя элементами на слот; слот ноль содержит полное совпадение, за которым следуют явные группы захвата в порядке объявления
Каждая пара — начало с отсчётом от нуля и исключающий конец, измеренные в кодовых единицах UTF-16, а не в индексах строк Delphi с отсчётом от 1 и не в позициях Unicode-скаляров; неустановленный необязательный захват использует High(NativeUInt) для обоих концов
Match очищает свой выходной массив перед каждой попыткой; Replace очищает выход перед началом, а успешная замена без выбранного вхождения возвращает исходный текст с xrsOk
Ссылки замены используют долларовую нотацию PCRE2, например $1 и ${name}; неучаствующий захват даёт пустую строку, а неверная ссылка замены сообщает xrsInvalidReplacement
Успешно вызовите Compile до сопоставления или замены; вызов без подготовленного шаблона возвращает False и не изготавливает статус ошибки шаблона
TXLSRegexBudget = function(AWork, ABytes: Int64): Boolean of object получает приращение работы для накопления и текущую оценку байтов для сравнения с лимитом вызывающего; ABytes — не дельта выделения памяти
Проверки происходят при подготовке шаблона, выделениях бэкенда, callout'ах сопоставления, выделении смещений результата и подстановке; вызывающий сам определяет политику отмены и квот, не полагаясь на изменяемый бюджет уровня процесса
Возврат False или исключение из callback'а прерывает операцию с xrsAborted; исключения callback'ов не вылетают сквозь нативный бэкенд
xrsResourceLimit, xrsAborted и xrsUnavailable терминальны для этого экземпляра, поэтому после таких состояний создайте новый экземпляр перед повторной попыткой; ошибки неверного шаблона или текста не накладывают эту терминальную фиксацию
Значение TXLSRegexStatus | Смысл |
|---|---|
xrsOk | Операция бэкенда завершилась успешно |
xrsNoMatch | Текущий поиск совпадения не нашёл совпадения |
xrsInvalidPattern | Шаблон не удалось скомпилировать, включая неверную кодировку шаблона |
xrsInvalidReplacement | Выражение замены отклонено, либо ошибка бэкенда не попала в явные сопоставления статусов |
xrsInvalidText | Сопоставление или подстановка столкнулись с явно классифицированной ошибкой входа UTF-16 или границы символов |
xrsResourceLimit | Выделение бэкенда, внутренний лимит сопоставления или лимит учёта байтов помешал завершению |
xrsAborted | Callback бюджета остановил операцию, его callback выбросил исключение, либо нативный callout прервал сопоставление |
xrsUnavailable | У целевой платформы нет поддерживаемого поставляемого статического бэкенда |
Калькулятор отображает эти статусы бэкенда в собственные ошибки формул и диагностику вычисления; эти прямые API бэкенда не возвращают Excel-варианты ошибок