# Regulaaravaldiste redaktori käsiraamat

Jesper K. Pedersen

    blackie@kde.org

2001-07-03
0.1
&underFDL;
2001 Jesper K. Pedersen

See käsiraamat kirjeldab regulaaravaldiste redaktori vidinat.

KDE regulaaravaldis

## Sissejuhatus

Regulaaravaldiste redaktor on redaktor regulaaravaldiste graafiliseks redigeerimiseks (vastandina ASCII süntaksile). Traditsiooniliselt kirjutatakse regulaaravaldisi ASCII süntaksis, mis näeb välja umbes nii: `^.*kde\b`. Selle peamiseks puuduseks on:

- Mitteprogrammeerijal on seda raske mõista.

- See nõuab teatud märkide varjestamist (näiteks tähekese sobivuseks tuleb kirjutada `\*`).

- See nõuab, et teaksid ja tunneksid eelnemisreegleid (Mida õieti tähendab `x|y*`? Kas ühekordset `x`-i või mitut `y`-t VÕI mitut `x`-i ja `y`-t?)

Regulaaravaldiste redaktor aga võimaldab regulaaravaldise hõlpsasti joonistada. Redaktor lahendab vähemalt mainitud teise ja kolmanda probleemi. See ei pruugi küll regulaaravaldisi tavakasutajale tingimata arusaadavaks teha, kuigi seda saavad öelda vaid kasutajad ise. Niisiis - kui sa ei ole programmeerija, aga oled tänu käesolevale redaktorile regulaaravaldistega sina peale saanud, anna palun sellest mulle teada.

## Mis on regulaaravaldis?

Regulaaravaldis on viis määrata tingimused, mis peavad millekski täidetud olema. Kui näiteks tavaliselt otsitakse tekstiredaktoris mingit sõna või märki/märke, siis saab otsitava teksti määrata sõna-sõnalt, regulaaravaldisena või siis andes ette teatud mustrit, millega otsitav peab sobima. Näiteks otsin sõna KDE, aga ainult rea alguses või otsin sõna `see`, aga see peab olema eraldi sõna või otsin faile, mis algavad sõnaga `test`, millele järgneb mingi number, näiteks `test12`, `test107` ja `test007`.

Regulaaravaldisi saab luua alamavaldistest, nagu näiteks suurt Lego saab kokku panna väiksematest osakestest. Ja nagu Lego-maailmas, on ka siin teatud hulk elementaarseid põhiplokke. Järgnevalt kirjeldangi näidete varal kõiki neid põhiplokke.

Tavalise teksti otsimine.

Kui otsid lihtsalt tavalist teksti, ei ole regulaaravaldist erilist mõtet kasutada. Nimelt on regulaaravaldistes mõnedel märkidel eritähendus: `.*|$`. Nii et kui soovid otsida teksti `kde.` (s.t. tähti `kde`, millele järgneb punkt), siis tuleks see väljendada nii: `kde\.`

Regulaaravaldise redaktor lahendab selle probleemi sinu eest, hoolitsedes paomärkide õigesse kohta asetamise eest.

Tavalise `.` asemel tuleb niisiis kirjutada `\.`, mida nimetatakse paomärgiks.

URL-i sobivus

Kui oled valinud KDE-s midagi, mis näeb välja nagu URL, pakub `Klipper` võimalust käivitada `Konqueror` antud URL-iga.

`Klipper` suudab seda teha valikut kokku sobitades mitme erineva regulaaravaldisega ja kui üks neist sobib, pakutaksegi välja vastav võimalus.

Regulaaravaldised URL-i jaoks määravad (lisaks muudele asjadele), et valik peab algama tekstiga `http://`. Regulaaravaldises kirjeldatakse seda tekstile `http://` katust (märk `^`) ette asetades.

Ülaltoodu on näide positsiooni kasutamisest regulaaravaldises. Samamoodi saab realõpu positsiooni määrata dollarimärgiga `$`.

Sõna `see`, aga mitte see `s`, `glas` see või `met` see `n` otsimine

Selle leidmiseks saab kasutada kaht täiendavat positsioonitüüpi, nimelt sõnapiire ja mitte-sõnapiire. Positsioone määratakse väljenditega `\b` (sõnapiire) ja `\B` (mitte-sõnapiire)

Nii saab sõna `see` otsida regulaaravaldisega `\bsee\b`. See määrab, et otsitakse sõna `see`, millel ei eelneks ega järgneks tähti (s.t. et tegu oleks sõnapiirdega nii sõna ees kui järel)

Nelja regulaaravaldise positsiooniväljendust saab redaktoris lisada nelja erineva positsioonivahendi abil

Kas `see` või `too` otsimine

Oletame, et soovid oma dokumendis otsida nii sõna `see` kui ka sõna `too`. Tavalist otsingut kasutades pead operatsiooni kaks korda ette võtma, otsides esimesel korral sõna `see` ja teisel `too`.

Regulaaravaldise abil saab mõlemat korraga otsida. Selleks tuleb otsida väljendit `see|too` ehk siis eraldada kaks otsitavat sõna püstkriipsuga.

Arvesta, et mõlemal pool püstkriipsu asub regulaaravaldis, nii et selle võimalusega ei saa otsida mitte ainult kaht erinevat tekstiosa, vaid ka kaht erinevat regulaaravaldise sobivust.

Regulaaravaldiste redaktoris ei pea sa püstkriipsu ise kirjutama, piisab, kui valida alternatiivivahend ja lisada alamregulaaravaldised teineteise peale.

Suvalise sobimine

Regulaaravaldisi võrreldakse sageli metamärkide kasutamisega shellis, see tähendab võimega määrata korraga mitu faili tärni kasutades. Ilmselt tunned järgmistes näidetes ära metamärgi kasutamise:

- `ls *.txt` - siin on `*.txt` shelli metamärk, mis tähistab sobivust iga failiga, mille nime lõpus on `*.txt`

- `cat test??.res` - sobib iga fail, mille alguses on `test`, millele järgneb kaks suvalist märki ja mis lõpeb märkidega `.res`

Shellis tähistab tärn suvalist märki, mis esineb suvaline arv korda. Teisisõnu vastab tärn suvalisele. Regulaaravaldises tähistatakse seda `.*`. Punkt tähendab siin suvalist üksikut, s.t. ainult üht märki ning tärn seda, et sellele eelnev regulaaravaldis võib sobida suvaline arv kordi. Koos tähendabki see suvalise märgi sobivust suvaline arv kordi.

See võib tunduda üsna keerulisena, aga kui taipad asja tuuma, saad küllap aru, kui võimas see on. Võtame ette veel ühe elementaarse regulaaravaldise: `a`. Täht `a` omaette tähendab sobivust üksiku märgiga, nimelt tähega `a`. Kui me ühendame ta aga tärniga, s.t. `a*`, siis on meil tegemist regulaaravaldisega, mis sobib suvalise arvu a-dega.

Mitut regulaaravaldist on võimalik kombineerida, asetades nad üksteise järele, näiteks `ba(na)*`.

`(na)*` tähendab lihtsalt seda, et sulgudes olev võib esineda suvaline arv kordi.

Oletades, et kirjutasid selle regulaaravaldise tekstiredaktori otsinguväljale, leiad lisaks muudele näiteks järgmised sõnad: `ba`, `bana`, `banana`, `bananananananana`

Eeltoodust lähtudes ei ole sul loodetavasti kuigi keeruline kirjutada shelli metamärgiga otsing `test??.res` regulaaravaldisena. Õige vastus: `test..\.res`. Punkt tähistab suvalist märki. Üksiku punkti jaoks tuleb kirjutada `\.`

Seda nimetatakse antud juhul paomärgiks

. Teisisõnu vastab regulaaravaldis `\.` punktile, punkt omaette aga suvalisele märgile.

Regulaaravaldiste redaktoris luuakse korduvad regulaaravaldised kordusvahendi abil

`&` asemel `&amp;` HTML-dokumendis

HTML-keeles tuleb erimärk `&` kirjutada kujul `&&`, mis mõnevõrra sarnaneb paomärgi kasutamisega regulaaravaldises.

Oletame, et kirjutasid HTML-dokumendi tavalises redaktoris (nt. XEmacs või Kate) ning unustasid täiesti selle reegli. Nüüd oled mures, sest pead asendama kõik märgid `&` märgiga `&amp;`.

Seda saab hõlpsast teha ka tavalist otsimist ja asendamist kasutades, aga sellel on üks väike häda küljes. Oletame, et teksti kirjutades mõnel korral sul see reegel siiski meenus - aga ainult mõnel korral. Tingimusteta asendamine tähendab nüüd seda, et `&amp;` asemele ilmub `&amp;amp;`

Tegelikult aga soovid ju seda, et `&` asendataks ainult siis, kui sellele ei järgne `amp;`. Seda saab teha regulaaravaldisega, kui kasutada positiivset ettevaadet.

Regulaaravaldis, mis sobib ainult ja-märgiga, kui sellele ei järgne märke `amp;`, näeb välja selline: `&(?!amp;)`. Seda on mõistagi lihtsam lugeda regulaaravaldiste redaktorit kasutades, kus saab tarvitada ettevaadete vahendeid.

## Regulaaravaldise redaktori kasutamine

See peatükk kirjeldab, kuidas toimib regulaaravaldiste redaktor.

### Akna väljanägemine

Redaktori tähtsaim osa on mõistagi redigeerimisala ehk siis ala, kus regulaaravaldis kokku pannakse. See on suur hall ala akna keskel.

Redigeerimisala kohal on kaks tööriistariba, millest üks sisaldab redigeerimistoiminguid (sarnaselt joonistamistööriistadega joonistamisrakenduses). Teisel tööriistaribal paikneb nupp Mis see on? ning toimingu tagasivõtmise ja uuestisooritamise nupud.

Redigeerimisala all asub parajasti loodav regulaaravaldis niinimetatud ASCII süntaksis. ASCII süntaks värskeneb vastavalt regulaaravaldise redigeerimisele graafilises redaktoris. Kui soovid aga redigeerida hoopis ASCII süntaksit, on ka see võimalik - sellisel juhul värskendab ennast hoopis graafiline redaktor.

Lõpuks on redigeerimisalast vasakul valik eelnevalt loodud regulaaravaldisi. Neil on kahesugune otstarve: (1) kui avad redaktori regulaaravaldisega, muudetakse see ilusamaks või mõistetavamaks. Ülaltoodud pildil on ASCII süntaks ".*" asendatud kastiga, milles on kiri "suvaline". (2) Kui lisad regulaaravaldise, võid kasutada eelnevalt loodud regulaaravaldiste valikust omaenda regulaaravaldiste loomiseks mõningaid ehitusplokke. Vaata kasutaja määratud regulaaravaldistest kõnelevat osa, kus selgitatakse omaloodud regulaaravaldiste salvestamist.

### Redigeerimistööriistad

Selles osas eeldan, et oled läbi lugenud peatüki, mis selgitas regulaaravaldiste olemust, või et sa tead seda juba varem.

Kõik redigeerimistööristad asuvad tööriistaribal redigeerimisala kohal. Alljärgnevalt kirjeldatakse neid kõiki.

#### Valikutööriist

Valikutööriista kasutatakse elementide märkimisel lõikamiseks ja asetamiseks ning lohistamiseks. See on äärmiselt sarnane suvalise joonistamisrakenduse valikutööriistaga.

#### Tekstitööriist

Selle tööriista abil saab lisada tavalist teksti. Seda mõistetakse regulaaravaldises täht-tähelt, s.t. siin ei pruugi muret tunda paomärkide pärast. Ülaltoodud näites on loomisel järgmine regulaaravaldis: `abc\*\\\)`

#### Märgitööriist

Selle abil saab lisada märgivahemiku. ASCII süntaksis oleks näideteks `[0-9]`, `[^a-zA-Z,_]`. Kui lisada element selle tööriista abil, ilmub dialoog, kus saab määrata märgivahemiku.

Vaata korduvate regulaaravaldiste kirjeldust.

#### Suvalise märgi tööriist

See on regulaaravaldis "punkt" (.). See tähendab sobivust suvalise üksiku märgiga.

#### Korduse tööriist

See tähendab elementide kordust. ASCII süntaksis väljendatakse seda järgmiste märkidega: tärn (*), pluss (+), küsimärk (?) ja vahemik ({3,5}). Kui lisada element selle tööriista abil, ilmub dialoog, kus saab määrata korduste arvu.

Seda, mida korrata, saab määrata korratavat sisu kasti joonistades, mille antud tööriist lisab.

Korduvaid elemente saab luua nii seestpoolt väljapoole kui vastupidi. See tähendab, et võid esmalt joonistada, mida korrata, selle valida ja kasutada kordustööriista selle kordamiseks. Teise võimalusena võid aga esmalt lisada korduselemendi ja siis joonistada elemendi sisse selle, mida korrata.

Vaata regulaaravaldiste kordamise kirjeldust.

#### Alternatiivitööriist

See on alternatiiviga regulaaravaldis (|). Alternatiivid saab määrata nad üksteise peale joonistades kastis, mille see tööriist lisab.

Vaata alternatiivsete regulaaravaldiste kirjeldust.

#### Kompleksitööriist

Kompleksitööriist ei kujuta endast õigupoolest üldse regulaaravaldist. Seda kasutatakse erinevate alamkomponentide grupeerimiseks kasti, mille võib hõlpsasti kahandada vaid pealkirjaks. Seda võib näha ülaltoodud pildil paremal pool.

#### Rea alguse/lõpu tööriistad

Rea alguse ja lõpu tööriistad tähistavad vastavalt sobivust rea lõpus ja alguses. Ülaltoodud pildil nähtav regulaaravaldis vastab niisiis vaid reale, kus on ainult tühikud.

Vaata regulaaravaldiste positsioonide kirjeldust.

#### Sõnapiirde/mitte-sõnapiirde tööriistad

Sõnapiirdetööriistad tähistavad sobivust vastavalt sõnapiirdele või selle puudumisele. Ülaltoodud pildil nähtav regulaaravaldis vastab kõigile sõnadele, mille alguses seisab `see`. Sõna `see` ise aga ei sobi.

Vaata sõnapiirde regulaaravaldiste kirjeldust.

#### Positiivse/negatiivse ettevaate tööriistad

Ettevaatetööriistad määravad vastavalt positiivse või negatiivse regulaaravaldise sobivuse. See sobivus ei ole aga osa üldisest sobivusest.

Märkus: ettevaateid on lubatud asetada ainult regulaaravaldise lõppu. Regulaaravaldiste redaktori element seda peale ei sunni.

Vaata ettevaatavate regulaaravaldiste kirjeldust.

### Kasutaja määratud regulaaravaldised

Redigeerimisalast vasakul asub nimekirjaga kast, mis sisaldab kasutaja määratud regulaaravaldisi. Mõned regulaaravaldised on juba eelnevalt paigaldatud KDE paigaldamise ajal, teisi saad ise salvestada.

Neil regulaaravaldistel on kaks eesmärki (vaata täpsemat kirjeldust): (1) pakkuda sulle valikut ehitusplokke ja (2) muuta mõned levinumad regulaaravaldised ilusamaks.

Omaenda regulaaravaldisi saab salvestada hiire parema nupu klõpsuga redigeerimisalal ning valides ilmuvast hüpikmenüüst käsu `Salvesta regulaaravaldis`.

Kui salvestatav regulaaravaldis kuulub kompleksavaldisse, kasutatakse seda järgnevates regulaaravaldiste nii-öelda ilustamise operatsioonides.

Kasutaja määratud regulaaravaldisi saab kustutada või ümber nimetada hiire parema nupu klõpsuga vastava regulaaravaldise nimel nimekirjakastis.

## Vigadest teatamine ja soovide esitamine

Vigadest saab teatada ja oma soove avaldada KDE vigade jälgimise süsteemi vahendusel. Enne seda, kui annad teada veast või pakud välja mõne uuendusvõimaluse, kontrolli palun, et seda ei oleks juba teatatud/välja pakutud.

## Korduma Kippuvad Küsimused

### Kas regulaaravaldiste redaktor toetab tagasiviiteid?

Ei, praegu mitte. Järgmises versioonis on see aga kavas.

### Kas regulaaravaldiste redaktor toetab sobivuste näitamist?

Ei, aga loodetavasti on see võimalik järgmises versioonis.

### Olen KDE rakenduse autor ja tahan teada, kuidas seda elementi oma rakenduses kasutada.

Vaata klassi KRegExpEditorInterface dokumentatsiooni.

### Miks ma ei leia nuppu Redigeeri regulaaravaldist ei Konqueroris ega mõnes muus KDE3 rakenduses?

Regulaaravaldiste element asub paketis KDE-utils. Kui seda paketti ei ole paigaldatud, ei saa ka nupp Redigeeri regulaaravaldist üheski rakenduses nähtav olla.

## Autorid ja litsents

Dokumentatsiooni autoriõigus 2001: Jesper K. Pedersen blackie@kde.org

&underGPL; &underFDL;