Dokumentacja HotXLS

API backendu wyrażeń regularnych

lxRegex udostępnia TXLSRegex, stanowy backend używany przez funkcje wyrażeń regularnych kalkulatora; zwykli wywołujący skoroszyt mogą korzystać z API formuł opisanych w kontekstowej ewaluacji formuł

Backend korzysta z dołączonego builda PCRE2 10.49 16-bit z trybem UTF, automatycznymi calloutami budżetu i bez JIT, ze statycznymi obiektami dla celów Delphi i C++Builder Windows oraz obsługiwanych celów FPC Linux x64 albo macOS ARM64; nieobsługiwane cele backendu raportują xrsUnavailable

Każda instancja posiada swój skompilowany wzorzec, alokator i konteksty dopasowania; utwórz osobną instancję dla każdej jednoczesnej operacji i trzymaj właściciela callbacka budżetu przy życiu do zwolnienia instancji

Deklaracja publicznaKontrakt
TXLSRegex.Create(ABudget: TXLSRegexBudget)Alokuje konteksty backendu i zachowuje opcjonalny callback; przekaż nil dla braku budżetu wywołującego, po czym badaj wyniki operacji i Status
TXLSRegex.DestroyZwalnia skompilowany wzorzec, dane dopasowania i konteksty; wywołujący normalnie wołają Free w bloku finally
TXLSRegex.Compile(Pattern, IgnoreCase): BooleanKompiluje wzorzec UTF-16 i przygotowuje jego zapis przechwytywań, zastępując każdy poprzedni wzorzec; IgnoreCase włącza dopasowanie PCRE2 bez rozróżniania wielkości liter, a False pozostawia dopasowanie z rozróżnianiem
TXLSRegex.Match(Text, Offset, NonemptyAtStart, out Offsets): BooleanWymaga udanej kompilacji, szuka od numerowanego od zera offsetu UTF-16 i zwraca odłączone offsety przechwytywań; NonemptyAtStart=True żąda zakotwiczonego, niepustego dopasowania w dokładnie tym offsecie, co wspiera przesuwanie się po pustym dopasowaniu
TXLSRegex.Replace(Text, Replacement, Occurrence, out Value): BooleanWymaga udanej kompilacji i korzysta ze składni podstawiania PCRE2, łącznie z numerowanymi i nazwanymi odwołaniami przechwytywań; zero wybiera wszystkie dopasowania, wartość dodatnia wybiera numerowane od 1 wystąpienie od początku, a wartość ujemna liczy od końca
TXLSRegex.Check(AWork, AExtraBytes): BooleanWywołuje callback budżetu z bieżącym przyrostem pracy i rezydentnymi bajtami backendu plus AdditionalBytes oraz proponowanymi dodatkowymi bajtami; ujemny rachunek bajtów, przepełnienie liczby całkowitej albo zatrzaśnięty status terminalny zwraca False
TXLSRegex.Status: TXLSRegexStatusStatus tylko do odczytu dla ostatniej operacji albo terminalnego warunku budżetu/backendu; użyj go, gdy operacja zwróci False, aby odróżnić brak dopasowania od błędu
TXLSRegex.CaptureCount: CardinalTylko do odczytu: liczba jawnych grup przechwytywań raportowana przez ostatnio skompilowany wzorzec, bez slotu całego dopasowania; użyj po udanym Compile
TXLSRegex.AdditionalBytes: Int64Rachunek do odczytu i zapisu dla tymczasowych buforów wywołującego, które powinny uczestniczyć w każdym sprawdzeniu budżetu; domyślnie zero i samodzielnie nie alokuje pamięci

Offsety, wyjście i zachowanie podstawiania

TXLSRegexOffsets to tablica dynamiczna NativeUInt z dwoma elementami na slot; slot zerowy zawiera całe dopasowanie, po czym następują jawne grupy przechwytywań w kolejności deklaracji

Każda para to numerowany od zera początek i wyłączny koniec mierzone w jednostkach kodu UTF-16, a nie w indeksach stringów Delphi numerowanych od 1 ani w pozycjach Unicode scalar; nieustawione opcjonalne przechwytywanie używa High(NativeUInt) dla obu końcówek

Match czyści swoją tablicę wyjścia przed każdą próbą; Replace czyści wyjście przed rozpoczęciem, a udane podstawienie bez wybranego wystąpienia zwraca pierwotny tekst z xrsOk

Odwołania podstawień korzystają z notacji dolara PCRE2, takiej jak $1 i ${name}; nieustawione uczestniczące przechwytywanie wnosi pusty ciąg, podczas gdy nieprawidłowe odwołanie podstawienia raportuje xrsInvalidReplacement

Wywołaj Compile z powodzeniem przed dopasowaniem albo podstawianiem; wywołanie bez przygotowanego wzorca zwraca False i nie fabrykuje statusu błędu wzorca

Callback budżetu

TXLSRegexBudget = function(AWork, ABytes: Int64): Boolean of object otrzymuje przyrost pracy do akumulacji i bieżący szacunek bajtów do porównania z limitem wywołującego; ABytes nie jest delty alokacji

Sprawdzenia następują podczas przygotowania wzorca, alokacji backendu, calloutów dopasowania, alokacji offsetów wyniku i podstawiania; wywołujący dostarcza politykę anulowania i kwot zamiast polegać na globalnym mutowalnym budżecie procesu

Zwrócenie False albo podniesienie wyjątku z callbacka przerywa operację z xrsAborted; wyjątki callbacków nie wydostają się przez natywny backend

xrsResourceLimit, xrsAborted i xrsUnavailable są terminalne dla tej instancji, więc po tych warunkach utwórz nową instancję przed ponowną próbą; błędy nieprawidłowego wzorca albo tekstu nie narzucają tego terminalnego zatrzasku

Wartości statusów

Wartość TXLSRegexStatusZnaczenie
xrsOkOperacja backendu zakończyła się powodzeniem
xrsNoMatchBieżące wyszukiwanie dopasowania nie znalazło dopasowania
xrsInvalidPatternWzorzec nie dał się skompilować, łącznie z nieprawidłowym kodowaniem wzorca
xrsInvalidReplacementWyrażenie podstawienia zostało odrzucone albo błąd backendu wypadł poza jawnymi mapowaniami statusów
xrsInvalidTextDopasowanie albo podstawianie napotkało jawnie zaklasyfikowany błąd wejścia UTF-16 albo granicy znaku
xrsResourceLimitAlokacja backendu, wewnętrzny limit dopasowania albo limit rachunku bajtów uniemożliwiły ukończenie
xrsAbortedCallback budżetu zatrzymał operację, jego callback podniósł wyjątek albo natywny callout przerwał dopasowanie
xrsUnavailableCel nie ma obsługiwanego dołączonego statycznego backendu

Kalkulator mapuje te statusy backendu na własne błędy formuł i diagnostykę ewaluacji; te bezpośrednie API backendu nie zwracają wariantów błędów Excela