Představte si, že hledáte v rozsáhlém dokumentu text, o němž víte, že sestává ze dvou malých písmen, jež se nacházejí na posledním řádku nějakého odstavce. Nevíte, která písmena to jsou, jen je chcete najít. Nebo jinak – víte, které to jsou, ale jsou v různých kombinacích a chcete je nalézt (a případně přepsat, tedy nahradit) hromadně.
Právě v takovýchto případech vám pomůže vyhledávání prostřednictvím regulárních výrazů.
Co jsou to regulární výrazy
Regulárními výrazy rozumíme znaky (řetězce), s jejichž pomocí, jednoduše řečeno, můžeme vyhledávat určité části textu v dokumentu. Jsou to jakési značky, určující, jaká posloupnost znaků se vyhledá. Regulární jazyk je velmi propracovaný, část z něj lze využít i v LibreOffice.
Skutečná definice regulárních výrazů je mnohem složitější, najdete ji na Wikipedii.
Speciálním znakům (oněm „značkám“) se říká metaznaky (příkladem mohou být znaky +, *, .). Tyto znaky se mohou družit do skupin znaků. Důležitou skupinou metaznaků pak jsou kvantifikátory, jež určují počet výskytu určitého znaku před ním. Uveďme si, jaké kvantifikátory lze použít i v LibreOffice. Ve všech případech se rozumí, že daný znak se vyskytuje před daným zástupným znakem.
-
?… hledaný znak se vyskytuje 0 až 1krát;
-
*… hledaný znak se vyskytuje alespoň 0krát;
-
+… hledaný znak se vyskytuje alespoň 1krát;
-
{m}… hledaný znak se vyskytuje právě m-krát;
-
{m,n}… hledaný znak se vyskytuje přinejmenším m-krát, nejvíce však n-krát;
-
{m,}… hledaný znak se vyskytuje minimálně m-krát; všimněte si, že pokud m = 0, lze použít „*“, pokud m = 1, jde o alternativu ke znaku „+“.
Dále lze vyhledávat pomocí typu hledaného řetězce:
[:alpha:]… vyhledává znak abecedy;
[:digit:]… vyhledává číslici;
[:alnum:]… kombinace předchozích možností, vyhledávání alfanumerických znaků;
[:space:]… vyhledává mezeru;
[:print:]… vyhledává tisknutelný znak;
[:cntrl:]… vyhledává netisknutelný znak;
[:lower:]… vyhledává malé písmeno (podmínkou je mít v okně Najít a nahradit zaškrtnutou možnost Rozlišovat velikost);
[:upper:]… vyhledává velké písmeno (podmínkou je mít v okně Najít a nahradit zaškrtnutou možnost Rozlišovat velikost).
Doplníme, že regulární znak „.“ vyhledává jakýkoliv znak, tedy číslici nebo písmeno, s výjimkou ručního zalomení řádku a odstavce.
Dále jsou možné kombinace pro hledání v rozmezí písmen abecedy:
[p-w]… vyhledá znak, který se nachází mezi p a w, včetně těchto okrajových;
[a-du-z]… vyhledá znaky nacházející se na otevřeném intervalu
Jak regulární znaky používat
Chcete-li vyhledávat pomocí regulárních výrazů, nestačí vám otevřít okno (resp. lištu) Najít, musíte otevřít okno Najít a nahradit ([Ctrl + h]). V tomto okně rozklikněte Ostatní možnosti a zaškrtněte pole Regulární výrazy. Poté lze do polí Najít a Nahradit psát regulární výrazy, ale rovněž i ty „běžné“, tedy alfanumerické znaky nacházející se v dokumentu. Jen je třeba se vyhýbat kolizím s regulárními znaky (např. „+“).
V tomto okně lze do vyhledávání prostřednictvím regulárních výrazů zapojit i Atributy textu či jeho Formát, což se leckdy může náramně hodit, zvláště při nahrazování – s pomocí regulárních výrazů si najdete nějaký řetězec, který jednoduše přepíšete na jiný a ještě mu dodáte patřičný formát.
V předchozí části jsme uvedli výrazy, pomocí nichž se dalo určit, co hledáme. Ale s pomocí regulárních výrazů lze také dohledat, kde daný řetězec hledáme. Doplňme tedy přehled možných regulárních výrazů:
-
^. … vyhledá první znak odstavce;
-
^… vyhledá znaky na začátku odstavce;
-
$… vyhledá znaky na konci odstavce;
-
^$… vyhledá prázdný odstavec;
-
\t… vyhledá znak tabulátoru;
-
\xyz… vyhledá výraz, jenž začíná na písmena nacházející se za „\“;
-
\n… vyhledá ruční zalomení řádku, je-li použito v poli Najít; při umístění do pole Nahradit změní ruční zalomení řádku za odstavec.
Znaky lze samozřejmě řetězit; lze tak kombinovat různé možnost a více specifikovat hledaný řetězec.
Pokud byste například chtěli najít řetězec, který obsahuje slovo „libreoffice“ (jen si nejste jisti počtem „b“) a který je umístěn na začátku řádku v odstavci a za tímto slovem se nachází mezera a dvě číslice, mezi nimiž je tečka (bude to tedy název aplikace s číslem verze, např. libreoffice 5.4), zadáte do pole Najít toto:
^lib+reoffice[:space:][:digit:]{1}.[:digit:]{1}
Co tyto znaky znamenají?
^… hledaný řetězec se nachází na začátku odstavce.
+… počet znaků před tímto znakem (tedy „b“) je minimálně jeden.
[:space:]… za slovem „libreoffice“ je mezera.
[:digit:]{1}… za mezerou se nachází právě jeden číselný znak.
. … za číselným znakem se nachází tečka.
Hledání by se dalo ještě více specifikovat, pokud víte, že hledáte výraz „LibreOffice“, tedy s velkými písmeny „L“ a „O“ (počtem „B“ si stále nejste jisti). Pokud by se daný výraz vyskytoval v textu i s malými písmeny „l“ a „o“, pak by bylo třeba zaškrtnout pole Rozlišovat velikost (jinak nemá použití výrazů [:upper:] a [:lower:] smysl, v podstatě jen nahrazují tečku „.“, tedy znak pro jakékoliv písmeno).
^
[:upper:]
ib+re
[:upper:]
ffice[:space:][:digit:]{1}.[:digit:]{1}
Výše uvedený výraz vyhledá třeba i „LibbbbbreOffice 5.4“.
Pokud nevíte, kolik číslic je v hledaném řetězci použito, můžete si pomoci dvojím způsobem; buď takto:
^[:upper:]ib+re[:upper:]ffice[:space:][:digit:]+.[:digit:]+
kde „+“ značí jeden a více výskytů,
nebo zcela ekvivalentně
^[:upper:]ib+re[:upper:]ffice[:space:][:digit:]{1,}.[:digit:]{1,}
Zvlášť v tabulkách, převedených na formátovaný text s tabulátory, využijete vyhledávání právě pomocí nich. Připomínáme, že pro vyhledání tabulátoru stačí zadat „\t“. Tento výraz je také možno využít pro nahrazování, což se opět může hodit třeba v tabulkách.
A nakonec specialita: Představte si, že hledáte výraz „LibreOffice“, ale nevíte, zda je v textu použito v této podobě, anebo jako „Libre Office“. Jistě by stačilo do vyhledávání zadat jednoduše „Libre“ a řetězec se dohledá i bez nutnosti používat regulární výrazy. Ale předpokládejme, že si opět nejste jisti správnou podobou slova „např.: je „Libre“ nebo „Libbre“? Je „office“ nebo „ofice“?)a pro zjednodušení uvažujme jen takto jednoduchý příklad. V tomto případě lze použít regulérní znak „|“, který vyhledá znaky před svislítkem i za ním:
Libre|Office
tak dohledá jak LibreOffice, tak Libre Office.
Použití regulárních výrazů se může zdát složité, ale není tomu tak. Stačí mít po ruce seznam těch, které můžete využít, a pak je sázet do vyhledávacího pole. Uvidíte, že vám jejich použití ušetří hromadu práce.
Autor používá LibreOffice 5.4.