HotXLS 文档

正则表达式后端 API

lxRegex 暴露 TXLSRegex,即计算器正则表达式函数所使用的有状态后端;普通工作簿调用方可以使用上下文公式求值中描述的公式 API

后端使用随包的 PCRE2 10.49 16 位构建,开启 UTF 模式、自动预算 callout、不带 JIT,为 Delphi 与 C++Builder 的 Windows 目标提供静态对象,并支持 FPC Linux x64 或 macOS ARM64 目标;不受支持的后端目标报告 xrsUnavailable

每个实例拥有自己的已编译模式、分配器和匹配上下文;并发的每个操作请创建单独的实例,并让预算回调的所有者存活到实例释放为止

公开声明契约
TXLSRegex.Create(ABudget: TXLSRegexBudget)分配后端上下文并保留可选回调;不需要调用方预算时传 nil,之后检查操作结果与 Status
TXLSRegex.Destroy释放已编译模式、匹配数据与上下文;调用方通常在 finally 块中调用 Free
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用当前工作量增量、常驻后端字节加 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 或抛出异常会以 xrsAborted 中止操作;回调异常不会穿透原生后端向外逃逸

xrsResourceLimit、xrsAborted 与 xrsUnavailable 对该实例是终止性的,出现这些条件后请创建新实例再重试;无效模式或文本错误不施加该终止锁存

状态值

TXLSRegexStatus 值含义
xrsOk后端操作成功完成
xrsNoMatch当前匹配搜索没有找到匹配
xrsInvalidPattern模式无法编译,包括无效的模式编码
xrsInvalidReplacement替换表达式被拒绝,或后端错误落在显式状态映射之外
xrsInvalidText匹配或替换遇到被明确归类的 UTF-16 输入或字符边界错误
xrsResourceLimit后端分配、内部匹配限额或字节记账限额导致无法完成
xrsAborted预算回调停止了操作、回调抛出异常,或原生 callout 中止了匹配
xrsUnavailable目标没有受支持的随包静态后端

计算器把这些后端状态映射进自己的公式错误与求值诊断;这些直接后端 API 不返回 Excel 错误 Variant