Tartalomjegyzék

< Pascal

Szabályos kifejezések

Reguláris kifejezések

Regexpr unit

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;

Állandók

A unitban néhány állandó is helyet kapott. Ezek rendre:

cs_allchars
cs_digits
cs_newline
cs_whitespace
cs_wordchars

cs_digits

Deklaráció:

const cs_digits: tcharset = [0..9];

cs_newline

Deklaráció

const cs_newline: tcharset = [] ; ];

cs_whitespace

Deklaráció

const cs_whitespace: tcharset = [ , ];

cs_wordchars

Deklaráció

const cs_wordchars: tcharset = [A..Z,a..z,_,0..9];

Típusok

pregexprentry
tcharset
TRegExprEngine
tregexprentry
tregexprentrytype
tregexprflag
tregexprflags

pregexprentry

Deklaráció

type pregexprentry = ^Tregexprentry;

tcharset

Declaration

type tcharset = set of Char;

TRegExprEngine

Declaration

type TRegExprEngine = record
    Data: pregexprentry;
    DestroyList: pregexprentry;
    Flags: tregexprflags;
end;

tregexprentry

Declaration

type tregexprentry = record
    next: pregexprentry;
    nextdestroy: pregexprentry;
end;

tregexprentrytype

Declaration

type tregexprentrytype = (
    ret_charset,
    ret_or,
    ret_startpattern,
    ret_endpattern,
    ret_illegalend,
    ret_backtrace,
    ret_startline,
    ret_endline
);

tregexprflag

Declaration

type tregexprflag = (
    ref_singleline,
    ref_multiline,
    ref_caseinsensitive
);

tregexprflags

Deklaráció

type tregexprflags = set of (
    ref_singleline,
    ref_multiline,
    ref_caseinsensitive
);

Példa

main.pas
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.

Külső linkek