Säännölliset lausekkeet Perlissä

Tämä dokumentti on taulukoitu kooste säännöllisten lausekkeiden (engl. lyhenne "regexp") syntaksista Perl-kielessä. Lopuksi on joitakin esimerkkejä.

Metamerkit

merkki merkitys
^ merkkijonon alku
$ merkkijonon loppu
. mikä tahansa merkki, pl. rivinvaihto
* toista 0 tai useampia kertoja
+ toista 1 tai useampia kertoja
? toista 0 tai 1 kertaa; tai lyhin osuma
| vaihtoehtoisuus
( ) ryhmittely; "tallennus"
[ ] merkkijoukko
{ } toisto
\ eskapointi tai erikoismerkki

Jos haluat metamerkin mukaan sellaisenaan ilman erikoismerkitystä, kirjoita ennen sitä \ (esim. \. tarkoittaa vain pelkkää pistettä .).

Edelläolevan taulukon ensimmäisen sarakkeen merkit ovat linkkejä englanninkielisiin kuvauksiin sivulla The ISO Latin 1 character repertoire - a description with usage notes. Huomaa että kirjaimen ulkoasu (glyyfi) voi vaihdella käytettävän ohjelman, laitteen tai kirjasimen mukaan.

Toisto

a*nolla tai useampi a
a+yksi tai useampi a
a?nolla tai yksi a (siis ei-pakollinen a)
a{m}täsmälleen m a:ta
a{m,}ainakin m a:ta
a{m,n}vähintään m ja enintään n a:ta
toisto? sama kuin toisto, mutta valitaan lyhin mahdollinen osuma

Lue "a" edellä "osumia merkkijonoihin, joista jokainen sopii hahmoon a". Lyhin mahdollinen osuma tarkoittaa, että valitaan vähiten merkkejä vaativa osuma, joka sopii hahmoon. Oletusarvo on "ahne sovitus", mikä tarkoittaa että valitaan pisin mahdollinen osuma. toisto? -rakenne tuli Perl-kieleen versiossa 5.

Erikoismerkinnät \-merkillä

Yksittäiset kirjaimet
\t tabulaattori
\n rivinvaihto
\r rivinsiirto (CR)
\xhh merkki, jonka numeroarvo käytettävässä kirjaimistossa on hh heksadesimaalijärjestelmässä
"Nollamittaiset ehdot"
\b "sanan" raja
\B ei "sanan" raja
Merkkilajit
\w "sanamerkki" (=numero, kirjain tai _)
\W muu kuin "sanamerkki"
\s tyhjä merkki (välilyönti, tabulaattori tai rivinvaihto)
\S muu kuin tyhjä merkki
\d numero (sama kuin [0-9])
\D muu kuin numero

Merkkijoukot: erikoiskoodit [...] -merkinnän sisällä

Merkitys muuttuu merkkijoukon sisällä, joten [...] -merkinnän sisällä on käytettävä näitä merkintöjä.

[merkit] sopii mihin tahansa luetelluista merkeistä
[x-y] sopii mihin tahansa ASCII-koodauksessa välille x-y osuvaan merkkiin.
[\-]Sopii merkkiin  -
[\n]sopii rivinvaihtoon; muutkin \ -merkillä alkavat erikoismerkinnät tulkitaan normaalisti
[^jotakin] sopii kaikkiin muihin merkkeihin paitsi niihin joihin [jotakin] sopii; siis heti alkavan hakasulun jälkeen tuleva ^ tarkoittaa "ei seuraavia".

Esimerkkejä

lauseke sopii...
abc abc (täsmälleen nuo merkit peräkkäin, mutta missä tahansa kohtaa merkkijonoa)
^abc abc merkkijonon alussa
abc$ abc merkkijonon lopussa
a|b joko a tai b
^abc|abc$ abc joko merkkijonon alussa tai lopussa
ab{2,4}c yksi a, sitten 2, 3 tai 4 b:tä, sitten yksi c
ab{2,}c yksi a, sitten ainakin kaksi b:tä, sitten c
ab*c yksi a, sitten nollasta äärettömään b:tä, sitten c
ab+c yksi a, sitten yksi tai useampi b:tä, sitten c
ab?c Yksi a, jota voi mahdollisesti seurata yksi b, sitten c; siis joko abc tai ac
a.c Yksi a jota seuraa mikä tahansa merkki (paitsi ei rivinvaihto) ja sitten c
a\.c täsmälleen a.c; pisteen erikoismerkitys eskapoidaan
[abc] joko a, b tai c
[Aa]bc joko Abc tai abc
[abc]+ mikä tahansa (ei-tyhjä) merkeistä a, b ja c's koostuva merkkijono (esimerkiksi a, abba, acbabcacaa)
[^abc]+ mikä tahansa (ei-tyhjä) merkkijono jossa ei ole a-, b- tai c-merkkiä (esimerkiksi defg)
\d\d mitkä tahansa kaksi numeroa, esimerkiksi 42; sama kuin \d{2}
\w+ "sana": ei-tyhjä jono kirjaimia, numeroita ja alaviivoja, esimerkiksi foo, 12bar8 tai foo_1
100\s*mk merkkijonot 100 ja mk siten että välissä saa olla miten paljon tyhjää (välilyöntejä, tabulaattoreita, rivinvaihtoja) tahansa
abc\b abc "sanan" lopussa (esimerkiksi abc! osuu mutta abcd ei)
perl\B merkkijono perl joka ei lopeta sanaa (perlisti sopii, perl-kieli ei sovi)

Yksinkertaisia esimerkkejä käytöstä Perlin lausekkeissa

Näissä esimerkeissä käytetään vain hyvin yksinkertaisia säännöllisiä lausekkeita. Tarkoituksena on näyttää vain ympäristö jossa niitä voi käyttää, ja samalla esitellä muutama "lippu" joilla vaikuttaa sovitukseen ja korvaukseen. Huomaa erityisesti, että sovitus on oletusarvoisesti kirjainkoosta riippuvaa. (Abc ei sovi merkkijonoon abc ellei niin erikseen määrätä).

s/foo/bar/;
vaihtaa ensimmäisen merkkijonon foo esiintymän merkkijonoksi bar "nyt käsiteltävässä muuttujassa" (siis erikoismuuttujassa $_); esimerkiksi foolish bigfoot muuttuu muotoon barlish bigfoot

s/foo/bar/g;
vaihtaa kaikki merkkijonon abc esiintymät merkkijonoksi bar "nyt käsiteltävässä muuttujassa"; esimerkiksi foolish bigfoot muuttuu muotoon barlish bigbart

s/foo/bar/gi;
muuttaa jokaisen merkkijonon foo esiintymän kirjainkoosta riippumatta "nyt käsiteltävässä muuttujassa" merkkijonoksi bar (mm. Foo ja FOO vaihtuvat myös merkkijonoksi bar)

if(m/foo/)...
katsoo esiintyykö nyt käsiteltävässä muuttujassa merkkijono foo.


Alkuperäisen englanninkielisen dokumentin on kirjoittanut Jukka Korpela ja tämän käännöksen on tehnyt Jori Mäntysalo. Käännös on tehty 2000-10-30 viimeksi muokatun version perusteella.

Muut Jorin ohjelmointiaiheiset jutut