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