Merkkejä toistavat operaattorit
On tilanteita, joissa haluamme osoittaa,
että merkki toistuu tietyn määrän kertoja.
Jos tiedämme tarkan toistomäärän,
voimme yksinkertaisesti kirjoittaa sen useita kertoja
- #aaaa#. Mutta mitä tehdä, jos haluamme
sanoa jotain tällaista: toista yksi tai useampi
kerta?
Tätä varten on olemassa (kvantifioijat)
toistoominaisuudet: plus + (yksi tai useampi kerta),
tähti * (nolla tai useampi kerta) ja
kysymys ? (nolla tai yksi kerta). Nämä
operaattorit vaikuttat siihen merkkiin, joka
on niiden edessä.
Katsotaanpa näiden operaattoreiden toimintaa esimerkkien avulla.
Esimerkki
Etsitään kaikki alimerkkijonot mallin kirjain
'x', kirjain 'a' yksi tai useampi
kerta, kirjain 'x' mukaan:
<?php
$str = 'xx xax xaax xaaax xbx';
$res = preg_replace('#xa+x#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'xx ! ! ! xbx'
Esimerkki
Etsitään kaikki alimerkkijonot mallin kirjain
'x', kirjain 'a' nolla tai useampi
kerta, kirjain 'x' mukaan:
<?php
$str = 'xx xax xaax xaaax xbx';
$res = preg_replace('#xa*x#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! ! ! xbx'
Esimerkki
Etsitään kaikki alimerkkijonot mallin kirjain
'x', kirjain 'a' nolla tai yksi
kerta, kirjain 'x' mukaan:
<?php
$str = 'xx xax xaax xbx';
$res = preg_replace('#xa?x#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! xaax xbx'
Käytännön tehtävät
Annettu merkkijono:
<?php
$str = 'aa aba abba abbba abca abea';
?>
Kirjoita säännöllinen lauseke, joka löytää merkkijonot
mallin mukaan: kirjain 'a', kirjain 'b'
yksi tai useampi kerta, kirjain 'a'.
Annettu merkkijono:
<?php
$str = 'aa aba abba abbba abca abea';
?>
Kirjoita säännöllinen lauseke, joka löytää merkkijonot
mallin mukaan: kirjain 'a', kirjain 'b'
nolla tai useampi kerta, kirjain 'a'.
Annettu merkkijono:
<?php
$str = 'aa aba abba abbba abca abea';
?>
Kirjoita säännöllinen lauseke, joka löytää merkkijonot
mallin mukaan: kirjain 'a', kirjain 'b'
yksi kerta tai ei kertaakaan, kirjain 'a'.
Annettu merkkijono:
<?php
$str = 'aa aba abba abbba abca abea';
?>
Kirjoita säännöllinen lauseke, joka löytää merkkijonot
'aa', 'aba', 'abba',
'abbba', olematta sieppaamatta 'abca'
ja 'abea'.