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 až z nebo A až Z, včetně (rozsah) |
| [a-d[m-p]] | a až d, nebo m až p: [a-dm-p] (sjednocení) |
| [a-z&&[def]] | d, e, nebo f (průnik) |
| [a-z&&[^bc]] | a až z, 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 |
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