PHP:n säännöllisten lausekkeiden 'tai'-komento
Tässä oppitunnissa käsittelemme komentoa
|, joka edustaa
tehokkaampaa TAI-versiota verrattuna
komentoon []. Tämä komento mahdollistaa
säännöllisen lausekkeen jakamisen useaan osaan.
Samalla etsittävä voi osua joko yhteen
säännöllisen lausekkeen osaan tai toiseen. Katsotaan
esimerkkien avulla.
Esimerkki
Tässä esimerkissä hakumalli on seuraava: kolme
kirjainta 'a' tai kolme kirjainta 'b':
<?php
$str = 'aaa bbb abb';
$res = preg_replace('#a{3}|b{3}#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! abb'
Esimerkki
Tässä esimerkissä hakumalli on seuraava: kolme
kirjainta 'a' tai 1 tai enemmän
kirjainta 'b':
<?php
$str = 'aaa bbb bbbb bbbbb axx';
$res = preg_replace('#a{3}|b+#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! ! ! axx'
Esimerkki
Tässä esimerkissä hakumalli on seuraava: yksi tai useampi kirjain tai kolme numeroa:
<?php
$str = 'a ab abc 1 12 123';
$res = preg_replace('#[a-z]+|\d{3}#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! ! 1 12 !'
Esimerkki
Pystyviiva voi jakaa säännöllisen lausekkeen ei kahteen osaan, vaan mihin tahansa määrään osia:
<?php
$str = 'aaa bbb ccc ddd';
$res = preg_replace('#a+|b+|c+#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! ! ddd'
Esimerkki
Jos pystyviiva on pyöreiden sulkeiden
sisällä, niin 'tai' toimii vain
näiden sulkeiden sisällä. Esimerkkinä etsitään merkkijonoja
seuraavan mallin mukaisesti: alussa on
joko 'a' tai 'b' yksi tai useampi
kerta, ja sitten kaksi kirjainta 'x':
<?php
$str = 'axx bxx bbxx exx';
$res = preg_replace('#(a|b+)xx#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! ! exx'
Käytännön tehtävät
Annettu merkkijono:
<?php
$str = 'aeeea aeea aea axa axxa axxxa';
?>
Kirjoita säännöllinen lauseke, joka löytää merkkijonot
seuraavan mallin mukaisesti: reunoissa on kirjaimet 'a',
ja niiden välissä - joko kirjain 'e' mikä tahansa
määrä kertoja tai kirjain 'x' mikä tahansa
määrä kertoja.
Annettu merkkijono:
<?php
$str = 'aeeea aeea aea axa axxa axxxa';
?>
Kirjoita säännöllinen lauseke, joka löytää merkkijonot
seuraavan mallin mukaisesti: reunoissa on kirjaimet 'a',
ja niiden välissä - joko kirjain 'e' kaksi kertaa
tai kirjain 'x' mikä tahansa määrä kertoja.