A Regexpr egy igencsak alapvető olyan unit, amely lehetővé teszi a reguláris kifejezések írását, hasonlóan a GNU regexpr-hez.
A regex lehetővé teszi, hogy egy mintát keressünk egy adott karaktersorozatban.
Az aktuális unit messze van a kész állapottól, és hiányzik belőle néhány e egyszerű POSIX szintaktika. Viszont még több Perl, Java, Ruby regex szintaktika hiányzik belőle.
A unit 4 függvényt tartalmaz:
A következőkben a négy függvény aláírását látjuk:
function GenerateRegExprEngine( regexpr: pchar; flags: tregexprflags ):TRegExprEngine;
procedure DestroyRegExprEngine( var regexpr: TRegExprEngine );
function RegExprPos( regexprengine: TRegExprEngine; p: pchar; var index: LongInt; var len: LongInt ):Boolean;
A unitban néhány állandó is helyet kapott. Ezek rendre:
cs_allchars cs_digits cs_newline cs_whitespace cs_wordchars
Deklaráció:
const cs_digits: tcharset = [0..9];
Deklaráció
const cs_newline: tcharset = [] ; ];
Deklaráció
const cs_whitespace: tcharset = [ , ];
Deklaráció
const cs_wordchars: tcharset = [A..Z,a..z,_,0..9];
pregexprentry tcharset TRegExprEngine tregexprentry tregexprentrytype tregexprflag tregexprflags
Deklaráció
type pregexprentry = ^Tregexprentry;
Declaration
type tcharset = set of Char;
Declaration
type TRegExprEngine = record Data: pregexprentry; DestroyList: pregexprentry; Flags: tregexprflags; end;
Declaration
type tregexprentry = record next: pregexprentry; nextdestroy: pregexprentry; end;
Declaration
type tregexprentrytype = ( ret_charset, ret_or, ret_startpattern, ret_endpattern, ret_illegalend, ret_backtrace, ret_startline, ret_endline );
Declaration
type tregexprflag = ( ref_singleline, ref_multiline, ref_caseinsensitive );
Deklaráció
type tregexprflags = set of ( ref_singleline, ref_multiline, ref_caseinsensitive );
uses Regexpr; var r : TRegExprEngine; index, len : LongInt; begin r := GenerateRegExprEngine('autók',[]); if RegExprPos(r, 'törött autó van a garázsban', index, len) then WriteLn('Benne van') else WriteLn('Nincs benne'); DestroyregExprEngine(r); end.