Regulaaravaldis

From ICO wiki
Jump to navigationJump to search

Autor: Carolys Kallas A22 2011

Regulaaravaldised on teksti otsimiseks ja asendamiseks ettenähtud keel. Kõige lihtsam regulaaravaldis on suvaline sõna. Regulaaravaldise otsing on alati alamstringi otsing. [4]

Arvutiga töötamises regulaaravaldis pakub lühikese ja paindliku vahendi tekstistringide (nagu kindlad märgid, sõnad, märgimustrid) kokkusobitamiseks. Regulaaravaldise lühendite seas on regex ja regexp.[3] UNIXis on olemas regulaaravaldiste mõiste, mis laseb malli kasutada hoopis laiemalt kui failinimedes. Regulaaravaldisi tunnistavad üpris mitmed UNIXi utiliidid, sed, grep ja awk on ehk kõige tüüpilisemad näited.[1]

Regulaaravaldis Unixis

UNIXis kasutatav käsk grep on kõige lihtsam vahend regulaaravaldiste kasutamiseks. Grep võimaldab moodustada lihtsaid regulaaravaldisi ning otsida mustrile vastavaid sõnu etteantud failide hulgast. Grep on n.ö sissejuhatus Awk, Sedi ja Perli edasiõppimisel.

UNIXi tekstitoimetis ed saab kasutada konstruktsiooni g/re/p, mis globaalselt (g) otsib üle kogu teksti regulaaravaldisega (re, regular expression) sobivaid sõnu ning väljastab (p, print) read, mis sisaldavad leitud sõna. Seda konstruktsiooni läks vaja nii tihti, et tehtigi sellele omaette käsk UNIXis, nimega grep.[5]

Neli moodsas regulaaravaldises kasutatavat põhimõtet

Mustrid [7]

Mustrid koosnevad literaalsetest stringidest ja märgiklassides. Mustrid võivad sisaldada alammustreid, mis kujutavad endast sulgudes antud mustrit.


Eeldused [9] Eeldused võimaldavad leida regulaaravaldise sobivuse ainult teatud määratud tingimustel. Eeldus ei otsi õigupoolest sobivat märki, vaid uurib lähikonnast võimalikke sobivusi, enne kui midagi omaks võtta. Näiteks sõnapiirde eeldus ei püüa leida mitte antud positsioonis mittetähelist märki, vaid kontrollib, et seal ei oleks tähelist märki. See tähendab, et eeldus sobib, kui tegemist ei ole märgiga, st. tegemist on otsitava stringi alguse ja lõpuga. Mõned eeldused ei otsi õigupoolest sobivat mustrit, vaid osa stringi sobivust, mis ei ole terve avaldise sobivuse tulemus.

^ (katus: stringi algus) - Sobib otsitava stringi algus. Avaldisega ^Peeter sobib “Peeter” stringis “Peeter, he!”, aga mitte stringis “Hei, Peeter!”.


Kvantorid [8]

Kvantorid lasevad regulaaravaldisel leida määratud arvu või arvuvahemiku märke, märgiklasse või alammustreid. Kvantorid antakse looksulgudes ({ ja }) ning nad esinevad üldistatult kujul {[minimaalselt-esinemisi][,[maksimaalselt-esinemisi]]}

{1}

Tulemus: Täpselt 1 esinemine.

{5,10}

Tulemus: Vähemalt 5, aga maksimaalselt 10 esinemist.

{5, }

Tulemus: Vähemalt 5 esinemist, maksimum puudub.


Lisaks saab kasutada mõningaid lühendeid:

* (tärn) sama, mis {0,}, leiab suvalise arvu esnemisi.

+ (plussmärk) sama, mis {1,}, vähemalt 1 esinemine.

? (küsimärk) sama, mis {0,1}, null või 1 esinemine.


Tagasiviited


Näide [6]

^[ \t]{0,4}(Henrik|Pernilla) ütle(s|b)

Avaldist alustav katus (^) on eeldus, olles õige ainult juhul, kui järgnev string asub tõesti rea alguses.

Stringid [ \t] ja (Henrik|Pernilla) ütle(s|b) on mustrid. Esimene on märgiklass, millele vastab kas tühik või (horisontaalne) tabeldusmärk, teine muster sisaldab kõigepealt alammustrit, millele vastab kas Henrik või Pernilla, seejärel osa, millele vastab täpselt string ütle, ning lõpuks alammustrit, millele vastab kas s või b.

String {0,4} on kvantor, mis annab teada “kuskil 0 kuni 4 kaugusel eelmisest”.

Et regulaaravaldise rakendus, mis toetab tagasiviiteid, salvestab kogu stringi sobiva osa, samuti sulgudesse võetud alammustrid, võime nii kogu sobivust (regulaaravaldise otsingul redaktoris avatud tekstidokumendis märgitakse see enamasti valituks) või leitud nime või tegusõna viimase osa, mille kohta viited käivad, uuesti tarvitada.

Kasutatud kirjandus

1. UNIX juhend - Regulaaravaldised http://www.eenet.ee/EENet/assets/docs/abs/mall.html#regexp

2. Kuutõrvaja http://kuutorvaja.eenet.ee/programmeerimine/regulaaravaldised.html

3. Regular expression http://en.wikipedia.org/wiki/Regular_expression

4. Antti Andreimann - Linuxi administreerimine edasijõudnutele http://enos.itcollege.ee/~aandreim/linux/2006_advanced/Loeng_3_Regulaaravaldised.odp.

5. Regulaaravaldiste kasutamine - http://www.quretec.com/u/vilo/edu/2003-04/ATABI_2004k/Languages/Regexpv2.html#_Toc2487298

6. Regulaaravaldised - http://docs.kde.org/development/et/kdesdk/kate/regular-expressions.html

7. Regulaaravaldised, Mustrid - http://docs.kde.org/development/et/kdesdk/kate/regex-patterns.html

8. Regulaaravaldised, Kvantorid - http://docs.kde.org/development/et/kdesdk/kate/quantifiers.html

9. Regulaaravaldised, Eeldused - http://docs.kde.org/development/et/kdesdk/kate/assertions.html

10. Regulaaravadised,