[[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