Regulární výrazy

Regulární výrazy se používají pro filtrování dat.

Výraz
Vysvětlení
Znaky
x znak x
\\ zpětné lomítko
\0n znak v osmičkovém kódu 0n (0 <= n <= 7)
\xhh znak v hexadecimálním kódu 0xhh
\uhhhh znak UNICODE v hexadecimálním kódu 0xhhhh
\t znak tabulátor ('\u0009')
\n znak nového řádku ('\u000A')
\r znak posunu vozíku ('\u000D')
Skupiny znaků
[abc] výčet znaků: a, b, nebo c
[^abc] jakýkoli znak kromě: a, b, nebo c (negace)
[a-zA-Z] a z nebo A Z, včetně (rozsah)
[a-d[m-p]] ad, nebo mp: [a-dm-p] (sjednocení)
[a-z&&[def]] d, e, nebo f (průnik)
[a-z&&[^bc]] az, kromě b ac: [ad-z] (rozdíl)
Předdefinované skupiny znaků
\d číslice: [0-9]
\D opak číslice (negace): [^0-9]
\s bílý znak: [ \t\n\x0B\f\r]
\S opak bílého znaku: [^\s]
\w slovo: [a-zA-Z_0-9]
\W opak slova: [^\w]
Hranice
^ začátek řádku
$ konec řádku
\b hranice slova
\B opak hranice slova (negace)
Kvantifikátory
X? X, žádný nebo jeden
X* X, žádný nebo více
X+ X, jeden nebo více
X{n} X, přesně nkrát
X{n,} X, minimálně nkrát
X{n,m} X, minimálně nkrát, ale ne více než mkrát
Logické spojky
XY X ihned zaY
X|Y X neboY
(X)

párování logických spojek
slouží také k zapamatování při nahrazování pomocí \1 až \\n/p>

Příklad:

procedure TestRegExp
    SetGVal("#abc 124", 1);
    SetGVal("#abx 321", 2);
    SetGVal("#abc 654", 3);
    SetGVal("#abx 984", 4);
    SetGVal("#abc 789", 5);
    SetGVal("#abm 456", 6);

    dim F : File;
    SRewrite(F,"",true);

    CopyGValByRegExp(F, "#ABC.*");       {1,3,5}
    CopyGValByRegExp(F, "#ABC.*4$");     {1,3}
    CopyGValByRegExp(F, "#AB.*[2,8]4$"); {1,4}
    CopyGValByRegExp(F, "#AB.*[^2]4$");  {3,4}
endproc