[[oktatas:programozás:pascal|< Pascal]] ====== Szabályos kifejezések ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2010, 2011, 2012, 2014 * Licenc: GNU Free Documentation License 1.3 * Web: http://szit.hu ===== 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: * GenerateRegExprEngine – Ez a függvény összeállítja a regex mintát. * RegExprPos – Megkeresi az adott mintát a egy karaktersorozatban. * DestroyRegExprEngine – Felszabadítja az összeállított mintát * RegExprEscapeStr – A szabályos kifejezés nyelvén megírt részeket elszeparálja, így regex helyett stringként értelmez. 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 ===== 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 ===== * http://wiki.freepascal.org/Regexpr * http://www.freepascal.org/docs-html/packages/regexpr/index.html * http://www.gnu-darwin.org/www001/src/ports/lang/fpc-devel/work/fpc/packages/base/regexpr/testreg1.pp