Aaltosulkeet PHP:n säännöllisissä lausekkeissa
Operaattorit +, *, ? ovat hyviä,
mutta niillä ei voida määrittää tarkkaa
toistomäärää. Tässä tapauksessa operaattori {}
tulee apuusi.
Se toimii seuraavasti: {5}
- viisi toistoa, {2,5} - toistuu
kahdesta viiteen (mukaan lukien molemmat), {2,}
- toistuu kaksi kertaa tai useammin.
Esimerkki
Tässä esimerkissä hakumalli näyttää tältä:
kirjain 'x', kirjain 'a' yksi
tai kaksi kertaa, kirjain 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{1,2}x#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'xx ! ! xaaax'
Esimerkki
Tässä esimerkissä hakumalli näyttää tältä:
kirjain 'x', kirjain 'a' kaksi
kertaa tai useammin, kirjain 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{2,}x#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'xx xax ! !'
Esimerkki
Tässä esimerkissä hakumalli näyttää tältä:
kirjain 'x', kirjain 'a' kolme
kertaa, kirjain 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{3}x#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'xx xax xaax !'
Esimerkki
Tässä esimerkissä hakumalli näyttää tältä:
kirjain 'a' kymmenen kertaa:
<?php
$str = 'aaa aaaaaaaaaa aaa';
$res = preg_replace('#a{10}#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'aaa ! aaa'
Esimerkki
Tässä esimerkissä koodin kirjoittaja halusi mallin:
kirjain 'x', kirjain 'a' kolme
kertaa tai vähemmän, kirjain 'x',
valitettavasti tämä - {,3} - ei
toimi. Se on määritettävä eksplisiittisesti:
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{1,3}x#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'xx ! ! !'
Esimerkki
Nolla on myös sallittu:
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{0,3}x#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! ! !'
Käytännön tehtävät
Annettu merkkijono:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Kirjoita säännöllinen lauseke, joka löytää merkkijonot
'abba', 'abbba', 'abbbba'
ja vain ne.
Annettu merkkijono:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Kirjoita säännöllinen lauseke, joka löytää merkkijonot
muotoa 'aba', joissa 'b' esiintyy
alle kolme kertaa (mukaan lukien).
Annettu merkkijono:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Kirjoita säännöllinen lauseke, joka löytää merkkijonot
muotoa 'aba', joissa 'b' esiintyy
yli neljä kertaa (mukaan lukien).