<appendix id="regular-expressions">

<title
>Regulárne výrazy</title>

<synopsis
> Tento dodatok obsahuje krátky ale snád dostatočný úvod do sveta
<emphasis
>regulárnych výrazov</emphasis
>. Popisuje regulárne
výrazy tak, ako sa používajú v &kate;, ktoré nie sú kompatibilné
s výrazmi z jazyka perl ani s tými napr. z príkazu <command
>grep</command
>.</synopsis>

<sect1>

<title
>Úvod</title>

<para
><emphasis
>Regulárne výrazy</emphasis
> poskytujú spôsob, ako popísať obsah textu spôsobom, ktorý chápe malý softvérový systém, takže je možné zistiť, či text odpovedá zadanému výrazu a v prípade pokročilejších aplikácií aj spôsob, ako uložiť časti odpovedajúceho textu.</para>

<para
>Príklad: Povedzme, že chcete nájsť text pre odstavce, ktorý začína bud menami <quote
>Henrik</quote
> alebo <quote
>Pernille</quote
> nasledovaný nejakým tvarom slovesa <quote
>say</quote
>.</para>

<para
>Pri normálnom hľadaní by sme začali hľadať prvé meno <quote
>Henrik</quote
>, možno nasledované písmenami <quote
>sa</quote
>: <userinput
>Henrik sa</userinput
> a počas hľadania by sme zahadzovali tie nájdené texty, ktoré by nezačínali odstavec a tie, kde <quote
>sa</quote
> nie je začiatkom <quote
>says</quote
>, <quote
>said</quote
> a podobne. A potom by sme to zopakovali s druhým menom...</para>

<para
>S regulárnymi výrazmi sa dá táto úloha dokončiť jediným hľadaním a to dokonca presnejšie.</para>

<para
>Aby sme to dosiahli, regulárne výrazy definujú pravidlá pre vyjadrenie detailov a generalizácie hľadania textu. Náš príklad, ktorý sa dá popísať ako <quote
>Riadok začítajúci bud <quote
>Henrik</quote
> alebo <quote
>Pernille</quote
> (prípadne na začiatku môžu byť až 4 medzery alebo tabulátory) nasledovaný prázdnymi znakmi po ktorých je <quote
>sa</quote
> a potom bud <quote
>ys</quote
> alebo <quote
>id</quote
></quote
> je možné vyjadriť týmto regulárnym výrazom:</para
> <para
><userinput
>^[ \t]{0,4}(Henrik|Pernille) sa(ys|id)</userinput
></para>

<para
>Uvedený príklad demonštruje všetky štyri hlavné koncepty moderných regulárnych výrazov, a to:</para>

<itemizedlist
> <listitem
><para
>Vzorky</para
></listitem
> <listitem
><para
>Podmienky</para
></listitem
> <listitem
><para
>Kvantifikátory</para
></listitem
> <listitem
><para
>Spätné referencie</para
></listitem
> </itemizedlist>

<para
>Znak <literal
>^</literal
> na začiatku výrazu je podmienka, ktorá platí iba v prípade, nasledujúci odpovedajúci reťazec je na začiatku riadku.</para>

<para
>Reťazce <literal
>[ \t]</literal
> a <literal
>(Henrik|Pernille) sa(ys|id)</literal
> sú vzorky. Prvá je <emphasis
>trieda znakov</emphasis
>, ktorá odpovedá bud medzere alebo (horizontálnemu) tabulátoru. Dalšia vzorka obsahuje prvý podreťazec odpovedajúci bud <literal
>Henrik</literal
> <emphasis
>alebo</emphasis
> <literal
>Pernille</literal
>, potom je kus odpovedajúci presne <literal
> sa</literal
> a nakoniec podvzorka odpovedajúca bud <literal
>ys</literal
> <emphasis
>alebo</emphasis
> <literal
>id</literal
></para>

<para
>Reťazec <literal
>{0,4}</literal
> je kvantifikátor hovoriaci <quote
>niečo medzi 0 až 4 výskytmi predchádzajceho</quote
>.</para>

<para
>Pretože regulárne výrazy podporujú koncept <emphasis
>spätných referencií</emphasis
>, čo znamená uloženie celého odpovedajúceho textu alebo aj jeho časti uzavreté v zátvorkách a prístup k nim, môžete pracovať bud s celým nájdeným textom (pri hľadaní v textovom dokumente v editore pomocou regulárneho výrazu je to často označený text) alebo s nájdeným menom alebo koncovkou slovesa.</para>

<para
>Všetko dohromady, tento výraz nájde presne to, čo chceme, a iba to.</para>

<para
>Nasledujúce kapitoly detailne popisujú ako vytvárať a používať vzorky, triedy znakov, podmienky, kvalifikátory a spätné referncie. Na konci je uvedených niekoľko užitočných príkladov.</para>

</sect1>

<sect1 id="regex-patterns">

<title
>Vzorky</title>

<para
>Vzorky obsahujú reťazce a triedy znakov. Vzorky môžu obsahovať pod-vzorky, čo sú vzorky v zátvorkách.</para>

<sect2>
<title
>Escaped znaky</title>

<para
>Vo vzorkách a triedach znakov majú niektoré znaky špeciálny význam. Aby ste ich mohli hľadať, musia byť označené ako <emphasis
>escaped</emphasis
> aby softvér pochopil, že ich má hľadať a nie použiť ich špeciálny význam.</para>

<para
>To sa zariadi pridaním pred ne spätné lomítko (<literal
>\</literal
>).</para>


<para
>Softvér bude potichu ignorovať escaped znaky, ktoré nemajú žiadny špeciálny význam, takže to, že ho použijete napríklad pre <quote
>j</quote
> (<userinput
>\j</userinput
>) je vporiadku. Ak neviete, či má znak špeciálny význam, môžete mu kľudne pridať <literal
>\</literal
>.</para>

<para
></para>

</sect2>

<sect2>
<title
>Triedy znakov a skratky</title>

<para
><emphasis
>Trieda znakov</emphasis
> je výraz, ktorý odpovedá jednému z definovanej množiny znakov. Triedy znakov sa definujú pridaním znakov do hranatých zátvoriek <literal
>[]</literal
> alebo pomocou niektorej zo skratiek definovaných nižšie.</para>

<para
>Jednoduché triedy znakov obsahujú iba jeden alebo viac znakov, napríklad <userinput
>[abc]</userinput
> (odpovedá písmenu <quote
>a</quote
>, <quote
>b</quote
> alebo <quote
>c</quote
>) alebo <userinput
>[0123456789]</userinput
> (odpovedá číslici).</para>

<para
>Pretože písmená a číslice majú logický poriadok, môžete ich skrátiť pomocou intervalov: <userinput
>[a-c]</userinput
> je to isté ako <userinput
>[abc]</userinput
> a <userinput
>[0-9]</userinput
> je to isté ako <userinput
>[0123456789]</userinput
>. Ich kombinácia, napríklad <userinput
>[a-fynot1-38]</userinput
> je tiež prípustná (tento príklad odpovedá samozrejme jeden znak z <quote
>a</quote
>,<quote
>b</quote
>,<quote
>c</quote
>,<quote
>d</quote
>, <quote
>e</quote
>,<quote
>f</quote
>,<quote
>y</quote
>,<quote
>n</quote
>,<quote
>o</quote
>,<quote
>t</quote
>, <quote
>1</quote
>,<quote
>2</quote
>,<quote
>3</quote
> alebo <quote
>8</quote
>).</para>

<para
>Veľké písmená sú iné ako malé písmená. Aby ste vytvorili triedu, ktorá nerozlišuje veľké a malé písmená pre <quote
>a</quote
> a <quote
>b</quote
>, musíte použiť <userinput
>[aAbB]</userinput
>.</para>

<para
>Je samozrejme možné uviesť aj <quote
>negatívnu</quote
> triedu, ktorá odpovedá <quote
>všetkému okrem toho</quote
>, čo je v triede uvedené. Na to sa používa <literal
>^</literal
> na začiatku triedy: </para>

<para
><userinput
>[^abc]</userinput
> nájde všetky znaky <emphasis
>okrem</emphasis
> <quote
>a</quote
>, <quote
>b</quote
> or <quote
>c</quote
>.</para>

<para
>Okrem normálnych znakov sú definované niektoré skrátky, aby bol život trochu jednoduchší: <variablelist
> <varlistentry
> <term
><userinput
>\a</userinput
></term
> <listitem
><para
> Toto odpovedá <acronym
>ASCII</acronym
> znaku zvonček (BEL, 0x07).</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\f</userinput
></term
> <listitem
><para
> Toto odpovedá znaku <acronym
>ASCII</acronym
> form feed (FF, 0x0C).</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\n</userinput
></term
> <listitem
><para
> Toto odpovedá znaku <acronym
>ASCII</acronym
> line feed (LF, 0x0A, nový riadok v systémoch Unix).</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\r</userinput
></term
> <listitem
><para
> Toto odpovedá znaku <acronym
>ASCII</acronym
> carriage return (CR, 0x0D).</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\t</userinput
></term
> <listitem
><para
> Toto odpovedá znaku horizontálneho tabulátora <acronym
>ASCII</acronym
> (HT, 0x09).</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\v</userinput
></term
> <listitem
><para
> Toto odpovedá znaku <acronym
>ASCII</acronym
> vertikálnho tabulátora (VT, 0x0B).</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\xhhhh</userinput
></term
> <listitem
><para
> Toto odpovedá znaku Unicode s hexadecimálnym číslom hhhh (between 0x0000 and 0xFFFF). \0ooo (čiže \zero ooo) odpovedá <acronym
>ASCII</acronym
>/Latin-1 znaku s osmičkovým kódom ooo (medzi 0 a 0377). </para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>.</userinput
> (bodka)</term
> <listitem
><para
> Toto odpovedá ľubovoľnému znaku (aj konci riadku).</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\d</userinput
></term
> <listitem
><para
> Toto odpovedá číslici. Rovnaké ako <literal
>[0-9]</literal
></para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\D</userinput
></term
> <listitem
><para
> Toto odpovedá nie číslici. Rovnaké ako <literal
>[^0-9]</literal
> alebo <literal
>[^\d]</literal
></para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\s</userinput
></term
> <listitem
><para
> Toto odpovedá znakom prázdneho miesta. Prakticky rovnaké ako <literal
>[ \t\n\r]</literal
></para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\S</userinput
></term
> <listitem
><para
> Toto odpovedá nie prázdnemu miestu. Prakticky rovnaké ako <literal
>[^ \t\r\n]</literal
>, a presne rovnaké ako <literal
>[^\s]</literal
></para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\w</userinput
></term
> <listitem
><para
>Odpovedá znakom <quote
>slov</quote
> - v tomto prípade písmená alebo číslice. Všimnite si, že podtržítko (<literal
>_</literal
>) neodpovedá, čo je rozdiel oproti regulárnym výrazom jazyka perl. Rovnaké ako <literal
>[a-zA-Z0-9]</literal
></para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\W</userinput
></term
> <listitem
><para
>Odpovedá znakom, ktoré netvoria slová - všetko okrem písmen a číslic. Rovnaké ako <literal
>[^a-zA-Z0-9]</literal
> alebo <literal
>[^\w]</literal
></para
></listitem
> </varlistentry
> </variablelist
> </para>

<para
>Skratky pre triedy je možné dávať do vlastných tried, napríklad pre nájdenie písmen slov, medzery alebo bodky je možné použiť <userinput
>[\w \.]</userinput
></para
> 

<note
> <para
>Notácia tried štandardu POSIX , <userinput
>[:&lt;meno triedy&gt;:]</userinput
> momentálne nie je podporovaná.</para
> </note>

<sect3>
<title
>Znaky so špeciálnym významom v triedach znakov</title>

<para
>Nasledujúce znaky majú špeciálny význam v konštukcii <quote
>[]</quote
> a preto musia byť escaped:</para>

<variablelist
> <varlistentry
> <term
><userinput
>]</userinput
></term
> <listitem
><para
>Ukončuje triedu znakov. Musí byť escaped ak to nie je prvý znak triedy alebo je priamo za <literal
>^</literal
>.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>^</userinput
></term
> <listitem
><para
>Označuje negatívnu triedu, ak je uvedený ako jej prvý znak. Ak sa má priamo hľadať, musí byť escaped v prípade, že je na prvom mieste v triede.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>-</userinput
> (pomlčka)</term
> <listitem
><para
>Označuje rozsah znakov. Musí byť v triede vždy escaped.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\</userinput
> (spätné lomítko)</term
> <listitem
><para
>Znak pre escaped znaky. Musí byť vždy escaped.</para
></listitem
> </varlistentry
> </variablelist>

</sect3>

</sect2>

<sect2>

<title
>Alternatívy: hľadanie <quote
>jeden z</quote
></title>

<para
>Ak chcete nájsť jednu z alternatív vzoriek, môžete alternatívy oddeliť pomocou <literal
>|</literal
>.</para>

<para
>Napríklad pre nájdenie <quote
>John</quote
> alebo <quote
>Harry</quote
>, mali by ste použiť výraz <userinput
>John|Harry</userinput
>.</para>

</sect2>

<sect2>

<title
>Pod-vzorky</title>

<para
><emphasis
>Pod-vzorky</emphasis
> sú vzorky v zátvorkách a majú vo svete regulárnych výrazov niekoľko použití.</para>

<sect3>

<title
>Špecifikácia alternatív</title>

<para
>Pod-vzorky môžete použiť pre zoskupenie alternatív do väčšej vzorky. Alternatívy sú oddelené znakom <quote
>|</quote
>.</para>

<para
>Napríklad, aby sa našli slová <quote
>int</quote
>, <quote
>float</quote
> alebo <quote
>double</quote
>, môžete použiť vzorku <userinput
>int|float|double</userinput
>. Ak chcete nájsť iba jedno z nich nasledované práznym miestom a potom nejakými písmenami, zadajte alternatívy do pod-vzorky: <userinput
>(int|float|double)\s+\w+</userinput
>.</para>

</sect3>

<sect3>

<title
>Zachytenie odpovedajúceho textu (spätné referencie)</title>

<para
>Ak chcete používať spätné referencie, použite pod-vzorky pre uloženie častí, o ktoré máte záujem.</para>

<para
>Napríklad, ak chcete nájsť dva výstkyty rovnakého slova oddelené čiarkou a nejakým prázdnym miestom, môžete použiť<userinput
>(\w+),\s*\1</userinput
>. Pod-vzorka <literal
>\w+</literal
> nájde skupinu písmen slova a celý výraz odpovedá tým, za ktorými je čiarka 0 alebo viac prázdnych znakov a potom skupina znakov slov. (Reťatec <literal
>\1</literal
> označuje <emphasis
>prvú pod-vzorku v zátvorkách</emphasis
>)</para>

<para
>Prečítajte si aj <link linkend="backreferences"
>Spätné referencie</link
>.</para>

</sect3>

<sect3 id="lookahead-assertions">
<title
>Podmienky pre výhľad</title>

<para
>Podmienky pre výhľad je pod-vzorka začínajúca <literal
>?=</literal
> alebo <literal
>?!</literal
>.</para>

<para
>Napríklad, ak chcete nájsť reťazec <quote
>Bill</quote
> ale iba v prípade, že za ním nie je <quote
>Gates</quote
>, môžete použiť tento výraz: <userinput
>Bill(?! Gates)</userinput
>. (Toto nájde text <quote
>Bill Clinton</quote
> aj <quote
>Billy the kid</quote
>, ale ignoruje iné texty.)</para>

<para
>Pod-vzorky používané pre podmienky sa nezachytávajú.</para>

<para
>Prečítajte si aj <link linkend="assertions"
>Podmienky</link
></para>

</sect3>

</sect2>

<sect2 id="special-characters-in-patterns">
<title
>Znaky so špeciálnym významom vo vzorkách</title>

<para
>Nasledujúce znaky majú vo vzorkách špeciálny význam, preto musia byť escaped v prípade, že ich chcete hľadať: <variablelist
> <varlistentry
> <term
><userinput
>\</userinput
> (spätné lomítko)</term
> <listitem
><para
>Znak pre escaped.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>^</userinput
></term
> <listitem
><para
>Podmienka pre začiatok reťazca.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>$</userinput
></term
> <listitem
><para
>Podmienka pre koniec reťazca.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>()</userinput
> (ľavá a pravá zátvorka)</term
> <listitem
><para
>Označuje pod-vzorky.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>{}</userinput
> (ľavá a pravá zložená zátvorka)</term
> <listitem
><para
>Označuje číslené kvantifikátory.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>[]</userinput
> (ľavá a pravá hranatá zátvorka)</term
> <listitem
><para
>Označuje triedy znakov.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>|</userinput
></term
> <listitem
><para
>logické OR. Oddeľuje alternatívy.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>+</userinput
> (plus)</term
> <listitem
><para
>Kvantifikátor, 1 alebo viac.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>*</userinput
> (hviezdička)</term
> <listitem
><para
>Kvantifikátor, 0 alebo viac.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>?</userinput
> (otáznik)</term
> <listitem
><para
>Nepovinný znak. Dá sa interpretovať ako kvantifikátor 0 alebo 1.</para
></listitem
> </varlistentry
> </variablelist
> </para>

</sect2>

</sect1>

<sect1 id="quantifiers">
<title
>Kvantifikátory</title>

<para
><emphasis
>Kvantifikátory</emphasis
> umožňujú, aby regulárne výrazy odpovedali zadanému počtu alebo rozsahu opakovaní znaku, triedy znakov alebo pod-vzoriek.</para>

<para
>Kvantifikátory sú zatvorené v zložených zátvorkách (<literal
>{</literal
> a <literal
>}</literal
>) a majú tvar <literal
>{[minimum-opakovaní][,[maximum-opakovaní]]}</literal
> </para>

<para
>Použitie je asi najjasnejšie z príkladov: <variablelist
> <varlistentry
> <term
><userinput
>{1}</userinput
></term
> <listitem
><para
>Presne jeden výskyt</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>{0,1}</userinput
></term
> <listitem
><para
>Jeden alebo žiadny výskyt</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>{,1}</userinput
></term
> <listitem
><para
>To isté ale menej písania :-)</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>{5,10}</userinput
></term
> <listitem
><para
>Aspoň 5 ale maximálne 10 výskytov.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>{5,}</userinput
></term
> <listitem
><para
>Aspoň 5 výskytov, žiadne obmedzenie zhora.</para
></listitem
> </varlistentry
> </variablelist
> </para>

<para
>Navyše sú definované niektoré skratky: <variablelist
> <varlistentry
> <term
><userinput
>*</userinput
> (hviezdička)</term
> <listitem
><para
>podobné <literal
>{0,}</literal
>, nájde ľubovoľné množstvo opakovaní.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>+</userinput
> (plus)</term
> <listitem
><para
>podobné <literal
>{1,}</literal
>, aspoň 1 výskyt.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>?</userinput
> (otáznik)</term
> <listitem
><para
>podobné <literal
>{0,1}</literal
>, 0 alebo 1 výskyt.</para
></listitem
> </varlistentry
> </variablelist
> </para>

<sect2>

<title
>Greed</title>

<para
>Pri použití kvantifikátorov bez maxima sa regulárne výrazy snažia nájsť čo najdlhší reťazec, čo sa obvykle označuje ako chovanie <emphasis
>greedy</emphasis
>.</para>

<para
>Moderné regulárne výrazy poskytujú možnosť <quote
>vypnutia tohto chovania</quote
>, ale v grafickom rozhraní vám to musí umožniť aplikácia sama. Napríklad v dialógu pre hľadanie môžete mať voľbu označenú <quote
>Minimálne hľadanie</quote
> tak, aby bolo jasné, ako sa hľadá a aké je štandardné chovanie.</para>

</sect2>

<sect2>
<title
>Príklady v kontexte</title>

<para
>Tu je pár príkladov použitia kvantifikátorov</para>

<variablelist
> <varlistentry
> <term
><userinput
>^\d{4,5}\s</userinput
></term
> <listitem
><para
>Odpovedá čísliciam v <quote
>1234 go</quote
> a <quote
>12345 now</quote
>, ale nie v <quote
>567 eleven</quote
> ani v <quote
>223459 somewhere</quote
></para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\s+</userinput
></term
> <listitem
><para
>Odpovedá jednému alebo viacerým prázdnym znakom</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>(bla){1,}</userinput
></term
> <listitem
><para
>Odpovedá všetkým <quote
>blablabla</quote
> ale nie <quote
>bla</quote
> v <quote
>blackbird</quote
> alebo <quote
>tabla</quote
></para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>/?&gt;</userinput
></term
> <listitem
><para
>Odpovedá <quote
>/&gt;</quote
> v <quote
>&lt;closeditem/&gt;</quote
> aj <quote
>&gt;</quote
> v <quote
>&lt;openitem&gt;</quote
>.</para
></listitem
> </varlistentry
> </variablelist>

</sect2>

</sect1>

<sect1 id="assertions">
<title
>Podmienky</title>

<para
><emphasis
>Podmienky</emphasis
> umožňujú, aby regulárny výraz odpovedal textu iba pri niektorých podmienkach.</para>

<para
>Podmienka nepotrebuje žiadne znaky na to, aby platila. Funguje skôr ako kontrola svojho okolia na nejaký odpovedajúci text bez jeho akceptovania. Napríklad <emphasis
>okraj slova</emphasis
> sa nepokúša uistiť, že na jednej strane je znak slova a na druhej nie je, ale skôr testuje, či tam nie je znak slova. To znamená, že táto podmienka bude platiť aj ked tam žiadny znak nie je, napríklad na konci prehľadávaného textu.</para>

<para
>Niektoré podmienky nepotrebujú vzorku, ale časť reťazca, ktorý nebude súčasťou nájdeného textu.</para>

<para
>Regulárne výrazy podporujú tieto podmienky: <variablelist
> <varlistentry
> <term
><userinput
>^</userinput
> (začiatok reťazca)</term
> <listitem
><para
>Odpovedá začiatku prehľadávaného reťazca.</para
> <para
>Výraz <userinput
>^Peter</userinput
> bude platiť na <quote
>Peter</quote
> v reťazci <quote
>Peter, hey!</quote
> ale nie v <quote
>Hey, Peter!</quote
> </para
> </listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>$</userinput
> (koniec reťazca)</term
> <listitem
><para
>Odpovedá konci prehľadávaného reťazca.</para
> <para
>Výraz <userinput
>you\?$</userinput
> bude odpovedať na posledom you v reťazci <quote
>You didn't do that, did you?</quote
> ale nie v <quote
>You didn't do that, right?</quote
></para
> </listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\b</userinput
> (okraj slova)</term
> <listitem
><para
>Odpovedá, ak je na jednej strane znak slova a na druhej nie slovo.</para
> <para
>Toto sa hodí pre hľadanie konca slov, napríklad pre oba konce slova. Výraz <userinput
>\bin\b</userinput
> bude odpovedať samostatnému <quote
>in</quote
> v reťazci <quote
>He came in through the window</quote
>, ale nie <quote
>in</quote
> v <quote
>window</quote
>.</para
></listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>\B</userinput
> (nie okraj slova)</term
> <listitem
><para
>Odpovedá vždy, ked nepodpovedá <quote
>\b</quote
>.</para
> <para
>To znamená, že bude odpovedať napríklad vnútri slov. Výraz <userinput
>\Bin\B</userinput
> bude odpovedať v <quote
>window</quote
> ale nie v <quote
>integer</quote
> alebo <quote
>I'm in love</quote
>.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>(?=VZORKA)</userinput
> (Pozitívny výhľad)</term
> <listitem
><para
>Podmienka s výhľadom sa pozrie na časť reťazca, ktorá je až za textom, ktorý odpovedá. Pozitívny výhľad zabráni tomu, aby reťazec odpovedal v prípade, že neodpovedá <emphasis
>VZORKE</emphasis
> podmienky, ale text odpovedajúci tejto vzorke nebude vo výsledu zahrnutý.</para
> <para
>Výraz <userinput
>handy(?=\w)</userinput
> odpovedá <quote
>handy</quote
> v <quote
>handyman</quote
> ale nie v <quote
>That came in handy!</quote
></para
> </listitem
> </varlistentry
> <varlistentry
> <term
><userinput
>(?!VZORKA)</userinput
> (Negatívny výhľad)</term
> <listitem
><para
>Negatívny výhľad zabráni možnému nájdeniu v prípade, že nasledujúci reťazec odpovedá <emphasis
>VZORKE</emphasis
>.</para
> <para
>Výraz <userinput
>const \w+\b(?!\s*&amp;)</userinput
> odpovedá <quote
>const char</quote
> v reťazci <quote
>const char* foo</quote
> ale nebude odpovedať <quote
>const QString</quote
> v <quote
>const QString&amp; bar</quote
>, pretože <quote
>&amp;</quote
> odpovedá vzorke podmienky negatívneho výhľadu.</para
> </listitem
> </varlistentry
> </variablelist
> </para>

</sect1>

<sect1 id="backreferences">

<title
>Spätné referencie</title>

<para
></para>

</sect1>

</appendix>

