libpaspcre2 ist Delphi- und Objekt-Pascal-Bindungen für Perl-kompatible reguläre Ausdrücke (PCRE2). Die Bibliothek ist eine Reihe von Funktionen, die regelmäßige Expressionsmuster -Matching mit derselben Syntax und Semantik wie Perl 5 implementieren.
Bibliothek wird getestet für
Holen Sie sich die Quellen und fügen Sie das Quellverzeichnis zum Projektsuchpfad hinzu. Für FPC fügen Sie das Quellverzeichnis der fpc.cfg -Datei hinzu.
Klonen des Repository git clone https://github.com/isemenkov/libpaspcre2 .
Fügen Sie das Gerät hinzu, das Sie uses möchten.
Ein Testgerüst besteht aus den folgenden Zutaten:
unit-tests .Die libpaspcre2.pas -Datei enthält die pcre2 -übersetzten Header, um diese Bibliothek in Pascal -Programmen zu verwenden. Sie finden eine CAPI -Dokumentation auf der Website www.pcre.org.
uses
libpaspcre2, utils.api.cstring;
var
re : pcre2_code_8;
rc : Integer;
pattern, subject : PCRE2_SPTR8;
error_buffer : string[ 255 ];
subject_length : Int64;
error_number : Integer;
error_offset : PCRE2_SIZE;
ovector : PPCRE2_SIZE;
match_data : ppcre2_match_data_8;
substring : string;
begin
pattern := PCRE2_SPTR8(API.CString.Create( ' (?:D|^)(5[1-5][0-9]{2}(?: |-|)[0-9]{4} ' +
' (?: |-|)[0-9]{4}(?: |-|)[0-9]{4})(?:D|$) ' ).ToPAnsiChar);
subject := PCRE2_SPTR8(API.CString.Create( ' 5111 2222 3333 4444 ' ).ToPAnsiChar);
subject_length := API.CString.Create( ' 5111 2222 3333 4444 ' ).Length;
re := pcre2_compile_8(pattern, PCRE2_ZERO_TERMINATED, 0 , @error_number, @error_offset, nil );
if re = nil then
begin
pcre2_get_error_message_8(error_number, PPCRE2_UCHAR8(@error_buffer[ 0 ]), 256 );
Fail(Format( ' PCRE2 compilation failed at offset %d: %s ' , [error_offset, error_buffer]));
end ;
match_data := pcre2_match_data_create_from_pattern_8(re, nil );
rc := pcre2_match_8(re, subject, subject_length, 0 , 0 , match_data, nil );
if rc < 0 then
begin
case rc of
PCRE2_ERROR_NOMATCH :
begin
pcre2_match_data_free_8(match_data);
pcre2_code_free_8(re);
Fail( ' No match ' );
end ;
end ;
end ;
{
ovector := pcre2_get_ovector_pointer_8(match_data);
if ovector^ > (ovector + 1)^ then
Fail('Error');
substring := Copy(PChar(subject), ovector^, (ovector + 1)^ - ovector^);
pcre2_match_data_free_8(match_data);
pcre2_code_free_8(re);
}
end ;