V mnoha parametrech, které jsou v konfiguraci používány pro vyhledávání v textech,
je možno namísto jednoduchých slov nebo skupin slov používat tzv. regulární výrazy,
které umožní mnohem efektivnější a sofistikovanější prohledávní textů.
Systém používá regulární výrazy kompatibilní s jazykem PERL obvykle nazývané
jako regulární výrazy Unixového stylu.
Jak psát a co dělají regulární výrazy
Základním pravidlem je, že každý znak se shoduje sám se sebou, pokud to zrovna
není některý z tzv. meta-znaků, které mají speciální význam a jsou
vypsány v následující tabulce.
Posloupnost znaků ve vyhledávacím (regulárním) výrazu je obvykle vyhledávána
v cílovém textu (textovém řetězci). Například text "nazdar" zadaný jako regulární
výraz bude v cílovém textu nalezen jako "nazdar". To je jednoduché.
Přehledová tebulka meta-znaků
Znak | Význam
|
---|
^ | začátek řádky
|
$ | konec řádky
|
. | jakýkoliv znak
|
\ | obrácené lomítko
|
* | žádná nebo více shod, podobně jako {0,}
|
+ | jedna nebo více shod, podobně jako {1,}
|
? | jedna nebo žádná shoda, podobně jako {0,1}
|
{n} | shoduje se přesně n krát
|
{n,} | shoduje se alespoň n krát
|
{n,m} | shoduje se alespoň n-krát ale ne více než m-krát
|
[aeiou0-9] | shoduje se se znaky a, e, i, o, u, a čísly 0 až 9 ;
|
[^aeiou0-9] | Shoda s čímkoliv kromě znaků a, e, i, o, u, a čísla 0 až 9
|
\w | shoduje se s libovolným alfanumerickým znakem (včetně "_")
|
\W | shoduje se s nealfanumerickým znakem
|
\d | shoduje se s numerickým znakem
|
\D | shoduje se s nenumerickým znakem
|
\s | shoduje se s mezerou (stjeně jako ([ \t\n\r\f])
|
\S | shoduje se s jakýkoliv znakem kromě mezery
|
\1..\9 | zpětné reference
|
Je možné, aby i znaky, které jsou běžně považovány za meta-znaky, byly
interpretovány jako běžné znaky v textu, jestliže je před nimi
uvedeno zpětné lomítko "\".
Například, "^" znamená začátek řadky, ale "\^" znamená znak"^",
obdobně "\\" znamená znak "\" a tak dále.
Mnohé znaky mohou být specifikovány s použitím meta-znaků obdobně jako v
jazyce C. ``\n'' znamená nový řádek, ``\t'' tab, ``\r'' návrat vozíku
(carriage return), ``\f'' novou stránku, a podobně. Ještě obecněji,
každý znak lze zapsat jako \xnn, kde nn je hexadecimální číslo, které
patří znaku s ASCII hodnotou nn. Jestliže je zapotřebí rozsáhlejšího
kódování znaků kódem Unicode, je možno používat syntaxi '\x{nnnn}',
kde 'nnnn' - je jedna nebo více hexadecimálních číslic.
Je možno specifikovat i třídu znaků tak, že se seznam znaků
uzavře do hranatých závorek []. Takový výraz se pak bude shodovat
s kterýmkoliv znakem uvedeným v seznamu. Jestliže prvním znakem po
``['' je ``^'', taková třída se shoduje s jakýkoliv znakem, který
není v seznamu znaků v třídě uveden.
V seznamu znaků ve třídě je ``-'' znak používán k tomu, aby specifikoval
interval. a-z pak reprezentuje libovlné znaky od ``a'' do ``z'', včetně.
Jestliže je zapotřebí, aby součástí třídy byl i znak ``-'', musí
být umístěn na začátku nebo na konci v seznamu znaků ve třídě.
Všechny následující příklady představují tytéž sady: [-az], [az-],
a [a\-z]. Všechy se liší od [a-z], tím že obsahují i znak ``-''. Jestliže
má být v sadě obsažen i znak ']' musí být uveden na začátku seznamu
znaků nebo mu musí předcházet zpětné lomítko.
Příklady některých intervalů jsou: [\n-\x0D] se shoduje s kterýmkoliv
číslem uvedeným jako #10,#11,#12,#13. [\d-t]
se shoduje s jakýmkoliv číslem, pomlčkou nebo znakem 't'. []-a] se shoduje
s libovolným znakem od ']' do 'a'.
Jeden z nejdůležitějších meta-znaků, tečka ``.'', znamená
libovolný znak kromě ``\n'' Znak "^" znamená začátek řádky (řetězce),
a znak "$" jeho konec. Výraz ^.*$ pak znamená všechny znaky od začátku do konce řádku .
Alternativy lze specifikovat jejich oddělením znakem ``|'', takže pak
regulární výraz fee|fie|foe se bude shodovat s kterýmkoliv ze slov ``fee'',
``fie'' nebo ``foe'' v cílovém textu (obdobně jako f(e|i|o)e).
První alternativa zahrnuje všechno od posledního oddělovače last (``('', ``['',
nebo začátku výrazu) až do posledního ``|'', a poslední alternativa zahrnuje
všechno od posledního ``|'' do dalšího oddělovače výrazu. Proto aby
nedocházelo k nedorozuměním, jsou obvykle alternativy uzavírány
do kulatých závorek (fee|fie|foe).
Alternativy jsou vyhodnocovány z leva do prava, aby byla nalezena první
alternativa, pro kterou platí celý výraz. Je dobré si pamatovat i to, že``|''
je v hranatých závorkách interpretováno jako literal, takže výraz
[fee|fie|foe] se shoduje s [feio|].
Závorková konstrukce ( ... ) může být použita i pro definici subvýrazů.
Ty jsou pak číslovány podle sad závorek z leva do prava. První subvýraz
má číslo '1'.
Uvnitř tříd je možno použít i \w, \d a \s.
\1 až \9 jsou interpretovány jako zpětné reference. \ se shoduje
s minule shodným subvýrazem #. Například : '(.)\1+' se shoduje s 'aaaa'
a 'cc'. '(.+)\1+' také s 'abab' a '123123'.