Regulaaravaldis

From EIK wiki

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]

Regulaaravaldisi kasutatakse näiteks dokumentatsioonis sobiva koha leidmiseks, süsteemi logidest teatud mustriga kirjete leidmiseks, mingi programmi töö tulemusena saadud väljundist vajalike kirjete leidmiseks. [10]

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 tehte märgid. Regulaaravaldistes on põhiliseks tehteks sümbolite kõrvutiolek. [2]

GREP/EGREP

GREP

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.


EGREP

UNIXi käsu egrep (extended grep) eeliseks on see, et lisaks traditsioonilistele metasümbolitele (grep) saab ta aru ka järgnevatest: "?", "|", "+", "()", "{n,m}" Seega on võimalik moodustada paindlikumaid regulaaravaldisi. [5]

Neli moodsas regulaaravaldises kasutatavat põhimõtet

1)Mustrid

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


2)Eeldused

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!”.

$ (stringi lõpp) Sobib otsitava stringi lõpp. Avaldisega ju\?$ sobib stringi “Sa ei teinud seda, eks ju?”, aga mitte stringi “Sa ei teinud seda, eks?” lõpp.

\b (sõnapiire) Sobib, kui ühel pool on täheline märk ja teisel pool mittetäheline märk.Sellest on abi konkreetsete sõnade leidmisel, eriti kui näiteks määrata kogu sõna sobivus. Avaldisega \bjuures\b sobib eraldiseisva sõnaga “juures” näiteks lauses “Ta seisis akna juures vaikides”, aga mitte näiteks sõnas “juurestik”.

\B (mitte-sõnapiire) Sobib kõikjal, kus “\b” ei sobi. See tähendab, et sobivus asub sõna sees: avaldisega \Bjuures\B sobib “alusjuurestik”, aga mitte “juurestik” või “sealjuures”.

(?=MUSTER) (positiivne ettevaade) Ettevaatav eeldus uurib sobivuse leidmiseks selle järgnevat stringi. Positiivne ettevaade ei näita sobivust, kui võimalikule sobivusele järgnev tekst ei vasta eelduse MUSTRILE, vaid tekstile, mis sellega sobib, mida ei kaasata tulemusse. Avaldisega käsi(?=\w) sobib “käsi” stringis “käsitööline”, aga mitte stringis “See on meie neljas käsi!”.

(?!MUSTER) (negatiivne ettevaade) Negatiivne ettevaade ei näita sobivust, kui otsitavale stringile järgnev osa ei vasta MUSTRILE. Avaldisega const \w+\b(?!\s*&) sobib “const char” in the string “const char* foo”, aga mitte “const QString” stringis “const QString& bar”, sest “&” sobib negatiivse ettevaatava eelduse mustriga. [9]


3)Kvantorid

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. [8]


4)Tagasiviited 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. [6]


Näide

^[ \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”. [6]

Koostaja

Carolys Kallas

A22

Sügis 2011


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. Kersti Taurus - Operatsioonisüsteemid - Regulaaravaldised - http://www.cs.ut.ee/~kerstit/os/osloeng02_2009_pakkfailid.pdf