libpaspcre2
1.0.0
libpaspcre2是delphi,對伴侶兼容正則表達式庫(PCRE2)的對象pascal綁定。庫是一組功能,可使用與Perl 5相同的語法和語義實現正則表達式模式。
圖書館已測試
獲取來源並將源目錄添加到項目搜索路徑中。對於FPC,將源目錄添加到fpc.cfg文件中。
克隆存儲庫git clone https://github.com/isemenkov/libpaspcre2 。
將要使用的單元添加到uses條款中。
測試框架由以下成分組成:
unit-tests目錄中。libpaspcre2.pas文件包含PCRE2翻譯的標題,用於在Pascal程序中使用此庫。您可以在www.pcre.org網站上找到C API文檔。
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 ;