Makrá v OpenOffice.org X. – regulárne výrazy

Július Pastierik  /  22. 12. 2005, 00:00

Ako sme naznačili v minulom dieli nášho seriálu o programovaní makier v OpenOffice.org, mnoho zaujímavých výsledkov pri rôznych náhradách môžeme dosiahnuť pomocou regulárnych výrazov. Preto si v ich v dnešnom dieli nášho seriálu trochu viac priblížime.

Pri programovaní makra pre vymazávanie viacnásobných medzier sme postupne prešli viacerými fázami – od jednoduchej výmeny, ktorú sme však museli manuálne viackrát opakovať cez výmeny pomocou cyklov až po výmenu pomocou regulárnych výrazov. A práve regulárne výrazy môžu našu prácu mnohokrát veľmi uľahčiť a časovo skrátiť (a to, pravdaže, nielen pri programovaní). Už teraz môžeme naznačiť, že napríklad pri programovaní známeho makra „Vlnka“ pre vkladanie nezalomiteľných medzier za predložky bude mať použitie regulárnych výrazov naozaj veľmi zaujímavý časový efekt, pretože aj to dokážeme nakoniec naprogramovať na jeden prechod cez dokument – k tomu sa však dostaneme (podobne ako pri vymazávaní viacnásobných medzier) až neskôr v niektorých z ďalších dielov tohto seriálu.

Ako sme už spomínali, regulárne výrazy umožňujú vyhľadávanie pomocou zástupných znakov. Tieto výrazy obsahujú, pravdaže, aj bežné znaky tak, ako pri obyčajnom hľadaní, ibaže niektoré znaky (či celé postupnosti znakov) majú špecifický – zástupný význam. Pozrime sa teda bližšie práve na tieto špecifiká.

. – bodka predstavuje akýkoľvek jeden znak okrem konca riadku (odriadkovanie) a konca odstavca. Napríklad pomocou regulárneho výrazu " . " vyhľadáme všetky jednoznakové reťazce (predložky, pomlčky a pod.).

^ – pomocou striešky nájdeme hľadaný reťazec (ktorý je uvedený za ňou) iba vtedy, ak sa nachádza na začiatku odstavca. Napríklad pomocou regulárneho výrazu "^ " dokážeme nájsť všetky jednoduché medzery na začiatku odstavca.

$ – pomocou doláru nájde hľadaný reťazec (ktorý je uvedený pred ním) iba vtedy, ak sa nachádza na konci odstavca. Napríklad pomocou regulárneho výrazu " $" dokážeme nájsť všetky jednoduché medzery na konci odstavca.

^$ – touto postupnosťou hľadáme „prázdny“ reťazec, ktorý je zároveň na začiatku aj na konci odstavca – teda prázdny odstavec.

^. – touto postupnosťou vyhľadáme prvý znak odstavca.

* – pomocou hviezdičky nájdeme žiadny alebo viacnásobný výskyt znaku, ktorý je uvedený pred ňou. Napríklad pomocou regulárneho výrazu "^ *" (použili sme ho v minulom dieli nášho seriálu) dokážeme nájsť všetky 0 až n-násobné medzery na začiatku odstavca.

+ – pomocou znaku plus nájdeme jednonásobný alebo viacnásobný výskyt znaku, ktorý je uvedený pred týmto znamienkom. Napríklad pomocou regulárneho výrazu "^ +" dokážeme nájsť všetky jednoduché a viacnásobné medzery na začiatku odstavca.

? – pomocou otáznika nájdeme žiadny alebo práve jeden výskyt znaku, , ktorý je uvedený pred ním. Napríklad pomocou regulárneho výrazu "  ?" dokážeme nájsť naraz všetky jednoduché a dvojnásobné medzery.

\ – znak, ktorý sa nachádza za opačným lomítkom sa nepovažuje za špeciálny (zástupný) znak regulárneho výrazu, ale za obyčajný. Takto môžeme v regulárnych výrazoch vyhľadať napríklad znak bodky "\.", doláru "\$", opačného lomítka "\\" a pod. Výnimku tvoria postupnosti "\n", "\t", "\<", "\>", "\x" a referenčné odkazy "\1", "\2", … ktoré majú špecifický význam.

\n – touto postupnosťou hľadáme zalomenie riadku (klávesová skratka Shift+Enter). Pokiaľ chceme nahradiť zalomenie riadku za zalomenie odstavca, použijeme presne tento výraz aj v poli nahradiť.

\t – touto postupnosťou hľadáme znak tabelátora a môžeme ho použiť aj v poli nahradiť.

\< – pomocou tejto postupnosti nájdeme hľadaný reťazec (ktorý je uvedený za ňou) iba vtedy, ak sa nachádza na začiatku slova. Napríklad pomocou regulárneho výrazu "\<. " nájdeme všetky jednoznakové reťazce.

\> – pomocou tejto postupnosti nájdeme hľadaný reťazec (ktorý je uvedený pred ňou) iba vtedy, ak sa nachádza na konci slova. Napríklad pomocou regulárneho výrazu " .\>" nájdeme všetky jednoznakové reťazce.

\xXXXX – táto postupnosť predstavuje znak určený štvormiestnym hexadecimálnym kódom XXXX. Napríklad pomocou regulárneho výrazu "\x00A0" nájdeme všetky nezalomiteľné medzery.

() – zátvorky slúžia k zoskupovaniu znakov, ktoré sú potom považované akoby za jeden znak. Napríklad pomocou regulárneho výrazu "(text)+" nájdeme všetky jedno a viacnásobné výskyty reťazca „text“. Zároveň na výrazy v zátvorkách môžeme použiť aj referenčné odkazy, t.j. nemusíme ich opakovane písať celé. Napríklad pomocou regulárneho výrazu "(a)(b)c\1\2" nájdeme reťazec „abcab“.

| – zvislá čiara predstavuje logický výraz „alebo“, t.j. pomocou nej vyhľadáme reťazec, ktorý sa nachádza pred alebo za ňou. Napríklad pomocou regulárneho výrazu " (a|i|k|o|s|u|v|z) " vyhľadáme všetky jednoznakové predložky.

& – znak and má význam v poli nahradiť, kde pridá nájdený reťazec. Napríklad ak hľadáme reťazec "OpenOffice" a do pola nahradiť zadáme výraz "&.org", potom nahradíme všetky výskyty reťazca „OpenOffice“ za reťazec „OpenOffice.org“.

{koľko} – číslo v zložených zátvorkách určuje, koľkokrát sa má vyskytnúť znak, ktorý sa nachádza pred nimi. Napríklad pomocou regulárneho výrazu " {2}" nájdeme všetky dvojnásobné medzery.

{od, po} – rozsah dvoch čísiel v zložených zátvorkách určuje, koľkokrát (od až po) sa má vyskytnúť znak, ktorý sa nachádza pred nimi. Napríklad pomocou regulárneho výrazu " {2,5}" nájdeme všetky dvojnásobné až päťnásobné medzery.

{od,} – neohraničený rozsah čísiel v zložených zátvorkách určuje, minimálne koľkokrát (od) sa má vyskytnúť znak, ktorý sa nachádza pred nimi. Napríklad pomocou regulárneho výrazu " {2,}" nájdeme všetky viacnásobné medzery.

[zoznam znakov] – takýto zápis znakov uzatvorený v hranatých zátvorkách predstavuje jeden zo znakov, ktorý je uvedený v zozname. Napríklad pomocou regulárneho výrazu " [aikosuvz] " nájdeme všetky jednoznakové predložky. Ako zoznam môžeme použiť aj rozsah znakov, napríklad pomocou regulárneho výrazu " [a-z] " nájdeme všetky jednoznakové reťazce v ktorých je abecedný znak bez diakritiky. Zoznam môže byť aj kombinovaný, napríklad regulárny výraz "[a-kmo-z]" nájde všetky znaky medzi „a“ až „k“, znak „m“ a znaky medzi „o“ až „z“.

[^zoznam znakov] – takýto zápis znakov uzatvorený v hranatých zátvorkách predstavuje jeden zo znakov, ktorý nie je uvedený v zozname. Napríklad pomocou regulárneho výrazu " [^aikosuvz] " nájdeme všetky jednoznakové reťazce okrem predložiek. Ako zoznam môžeme použiť aj rozsah znakov a kombinácie, napríklad pomocou regulárneho výrazu "[^a-kmo-z]" vynecháme z hľadania znaky medzi „a“ až „k“, znak „m“ a znaky medzi „o“ až „z“.

Nasledujúcich osem postupností sa nemôže priamo použiť ako samostatné regulárne výrazy, ale tieto vždy musia obsahovať ešte aspoň jeden znak, inak OpenOffice.org nenájde ani jeden výskyt.

[:digit:] – táto postupnosť predstavuje desiatkové číslice.

[:alpha:] – táto postupnosť predstavuje abecedné znaky. Napríklad pomocou regulárneho výrazu " [:alpha:][:alpha:]? " nájdeme všetky jednoznakové a dvojznakové slová.

[:alnum:] – táto postupnosť predstavuje alfanumerické znaky, t.j. číslice a abecedné znaky spolu.

[:space:] – táto postupnosť predstavuje znaky tabelátora, zalomiteľných a nezalomiteľných medzier. Napríklad pomocou regulárneho výrazu "[:space:]?" nájdeme všetky viacnásobné medzery vrátane najrôznejších kombinácií s tabelátormi a nezalomiteľnými medzerami.

[:print:] – táto postupnosť predstavuje tlačiteľné znaky.

[:cntrl:] – táto postupnosť predstavuje netlačiteľné znaky.

[:lower:] – pokiaľ pri hľadaní rozoznávame veľkosť písmen, tak táto postupnosť predstavuje malé znaky, inak všetky abecedné znaky.

[:upper:] – pokiaľ pri hľadaní rozoznávame veľkosť písmen, tak táto postupnosť predstavuje veľké znaky, inak všetky abecedné znaky.

Skočili sme prvú veľkú desaťdielnu časť seriálu o programovaní makier v OpenOffice.org. V novom roku budeme pokračovať druhou veľkou časťou, kde sa zameriame na formátovanie dokumentu (nezalomiteľné medzery za predložkami, akademickými titulmi a pod.).





Neprehliadnite: