Regulaaravaldis: Difference between revisions
Line 24: | Line 24: | ||
Avaldisega ^Peeter sobib “Peeter” stringis “Peeter, he!”, aga mitte stringis “Hei, Peeter!”. | 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. | |||
Revision as of 20:10, 26 November 2011
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!”.
$ (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.
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,