Regulaaravaldised
Sisukord
Regulaaravaldised
Regulaaravaldis on kontrolleeskiri, mida rakendatakse mingile tekstile. Iga teksti jaoks antakse vastus, kas tekst klappis avaldisega või mitte.
Kasutame regulaaravaldiste selgitamise näidetes programmi Egrep, kuna ta saab aru ka suhteliselt keerulistest regulaaravaldistest.
Toome lihtsa näite. Olgu fail kalastus sellise sisuga
bash$ cat kalastus tegelane kalade arv Priit_______1 Mart_______12 Peeter_____45 Konstant___34 Tibu________3 Miima______12
Eraldame välja read, kus on kalade arv alla kümne. See tähendab, rea lõpus asuv kalade arv on pandud kirja ühe märgiga.
bash$ egrep "_.$" kalastus Priit_______1 Tibu________3
Regulaaravaldis "_.$" klapib nende ridadega, mille lõpus ($) on kõrvuti alakriips ja üks suvaline märk (_.).
Regulaaravaldisite oskuslik kasutamine on oluline muuhulgas selliste programmide nagu Sed, Awk ja Procmail puhul.
Literaalsed - ja metasümbolid
Regulaaravaldis "_.$" sisaldab kahte sorti sümboleid:
* literaalsed - need, mis ise esinevad vaatlusaluses tekstis, nagu alakriips * metasümbolid - "." kohal võib olla üks suvaline tähemärk; "$" tähistab rea lõppu.
Regulaaravaldised võeti algselt kasutusele programmis Ed, millest kasvasid välja Grep ja Sed. Piiratud metasümbolite arv, mida nimetatakse traditsiooniliseks metasümbolite hulgaks, tingis laiendatud metasümbolite hulga (ingl. k. extended metacharacters set) kasutuselevõtu. Laiendatud hulka oskavad kasutada Awk ja Egrep.
Aritmeetiliste avaldiste juures on olulised tehtemärgid. Regulaaravaldistes on põhiliseks teheteks sümbolite kõrvutiolek.
Traditsioonilised metasümbolid
* . - punkt: suvaline üks sümbol * * - tärn: suvaline arv, sh 0 temast vasakule jäävat sümbolit * [...] - klass: üks vahel olevatest sümbolitest * ^ - katus: rea algus * $ - dollar: rea lõpp * \ - tagurpidi kaldkriips: põgeb talle järgneva metasümboli.
Järgnevad näited sellise teksti alusel:
bash~$ cat kohad Tartu 1437 Helsinkki 1960 Yellowstone 1903 Tokio 1990 Praha 1400 Pariis 1500
Püüame kinni kõik kahekümnenda sajandi aastaarvud:
bash~$ egerp "19.." kohad
Püüame kinni kõik read
bash~$ egrep ".*" kohad
Püüame kinni kõik i või e lõpulisete kohanimedega read:
bash~$ grep "[ie] " kohad
Püüame kinni kõik mitte i või e lõpulisete kohanimedega read:
bash~$ grep "[^ie] " kohad
Klassis omab ^ märk inverteerivat tähendust, st klapivad need read, kui tühikule ei eelne i või e.
Püüame kinni T -ga algavad viietähelise kohanimega read:
bash~$ egrep "^T.... " kohad
Püüame kinni sajandivahetusele vastavad kohad:
bash~$ egrep "00$" kohad
Püüame kinni read, milles esineb sümbol "^", kui ta esineks:
bash~$ egrep "\^" kohad
Laiendatud metasümbolite kirjeldused
Laiendatud metasümbolite hulka kuuluvad lisaks traditsioonilistele järgmised metasümbolid:
* + - pluss: üks või enam vasakul olevad sümbolit * ? - küsimärk: null või üks vasakul olevat sümbolit * | - toru: eelnev või järgnev regulaaravaldis * () - sulud: grupeerib regulaaravaldisi * {n,m} - loogad: mitu eelnevat sümbolit
Näited eelpool toodud teksi alused: Püüme kinni kõik selle sajandile vastavad e'ga lõppevad kohanimed:
bash~$ egrep "e +19" kohad
Võib olla kirjutatud kokku või sidekriipsuga:
bash~$ egrep "Jää-?äär" kohad
Võib alata C või K'ga:
bash~$ egrep "K|Columbia" kohad
Kui tavaliselt toimivad metasümbolid ühele eelnevale või järgnevale märgile, siis sulgudega on võimalik nad panna toimima mitmele:
bash~$ egrep "(Columbia)|(Kolumbia)" kohad
Võimalik on näidata, mitu sümbolit lähevad arvesse:
Neli kuni seitse 'a' -d:
bash~$ egrep -E "a{4,7}" kohad
Neli või enam 'a' -d:
bash~$ egrep -E "a{4,}" kohad
Täpselt neli 'a' -d:
bash~$ egrep -E "a{4}" kohad
Vähem kui neli 'a' -d, sh. null tükki:
bash~$ egrep -E "a{,4}" kohad
Kasulikud lisamaterjalid
Sed Awk Procmail
© EENet 2000