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