Regulární výrazy a jejich použití v LibreOffice

LibreOffice Vyhledávání pomocí zástupných znaků (regulárních výrazů) představuje mocnou zbraň při vyhledávání určitého textu v dokumentu. V tomto článku si ukážeme, jak je používat a jaké možnosti máte.   

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ů.

Dohledaný výsledek hledání Dohledaný výsledek hledání

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.

(Jako ve škole) Průměr: 1,00 | Hodnotilo: 3
 

Komentáře

user avatar Eduard Boldižár
Odpovědět
Regulární výrazy a jejich použití v LibreOffice
6. 09. 2017, 12:11:03
Pekný článok ;) Na regulárnych výrazov mám postavenú bakalárku, čiže je to moja blízka téma :)
user avatar Petr Valach
Odpovědět
Re:Regulární výrazy a jejich použití v LibreOffice
6. 09. 2017, 18:17:18
Ó děkuji, děkuji :-)
user avatar Albius
Odpovědět
AltSearch
7. 09. 2017, 12:53:33
Rozšírenie AltSearch od Tomáša Bílka poskytuje ešte väčšie možnosti hľadania a nahrádzania, a to aj vrátane regulárnych výrazov:
https://www.openoffice.cz/navody/rozsireni-v-openoffice-org-altsearch
http://mujweb.cz/macrojtb/
https://extensions.libreoffice.org/extensions/alternative-dialog-find-replace-for-writer
user avatar Petr Valach
Odpovědět
Re:AltSearch
7. 09. 2017, 19:32:02
AltSearch je fajn věc, ale s regulárními výrazy myslím neumí pracovat. A při hledání nejasného výsledku či při hromadném nahrazování se regulární výrazy nádherně využijí.

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Petr Valach

Petr Valach

OpenOffice používám od roku 2004, od roku 2011 LibreOffice. Od roku 2009 píšu články pro OpenOffice.cz a LinuxEXPRES.cz. Svobodný software uplatňujeme v redakci www.exospace.cz , v níž jsem šéfredaktorem. Redakce ExoSpace.cz podporuje redakce LinuxEXPRES.cz a OpenOffice.cz, jejichž šéfredaktor Lukáš Jelínek je naším čestným členem.

 
 
 
woo jaw demo hz