Merkkiryhmät PHP:n säännöllisissä lausekkeissa
On olemassa erikoiskomentoja, joiden avulla voidaan
valita välittömästi kokonaisia merkkiryhmiä. Komento
\d tarkoittaa numeroa 0:sta 9:ään.
Komento \w tarkoittaa numeroa, latinalaista
kirjainta tai alaviivaa. Komento \s
tarkoittaa välilyöntiä tai välilyöntimerkkiä:
välilyönti, rivinvaihto, sarkain. Voit
kääntää komennon merkityksen kirjoittamalla ison
kirjaimen: esimerkiksi, jos \d on numero,
niin \D on ei-numero.
Esimerkki
Etsitään kaikki numerot:
<?php
$str = '1 12 123';
$res = preg_replace('#\d#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! !! !!!'
Esimerkki
Toistotoimittajat pitävät komento-ryhmiä
yhtenäisenä, eli ryhmitteleviä sulkeita
ei tarvita. Seuraavassa esimerkissä hakumalli
näyttää tältä: numero 0:sta 9:ään
yksi tai useampi kerta:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\d+#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! ! abc @@@'
Esimerkki
Seuraavassa esimerkissä hakumalli näyttää
tältä: mitä tahansa yksi tai useampi kerta,
mutta ei numero 0:sta 9:ään:
<?php
$str = '123abc3@@';
$res = preg_replace('#\D+#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'123!3!'
Esimerkki
Tässä esimerkissä hakumalli näyttää tältä: välilyöntimerkki yhden kerran:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\s#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'1!12!123!abc!@@@'
Esimerkki
Tässä esimerkissä hakumalli näyttää tältä:
EI välilyöntimerkki yksi tai useampi kerta.
Kaikki välilyönneillä erotetut osajonot korvataan
merkillä '!':
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\S+#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! ! ! !'
Esimerkki
Tässä esimerkissä hakumalli näyttää tältä:
numero tai kirjain yksi tai useampi kerta.
Kaikki numeroista ja kirjaimista koostuvat osajonot
korvataan merkillä '!':
<?php
$str = '1 12 123a Abc @@@';
$res = preg_replace('#\w+#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! ! ! @@@'
Esimerkki
Tässä esimerkissä hakumalli näyttää tältä:
EI numero eikä kirjain yksi tai useampi kerta.
Tähän määritelmään sopii tapauksessamme
'@@@' ja kaikki välilyönnit (ne eivät nimittäin
myöskään ole numeroita eivätkä kirjaimia). Kiinnitä huomiota
siihen, että lopussa on yksi '!' - siihen
muuttui merkkijono ' @@@' - jossa on
välilyönti edessä:
$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);
Tuloksena muuttujaan kirjoitetaan seuraava:
'1!12!123!Abc!'
Käytännön tehtävät
Annettu merkkijono:
<?php
$str = 'a1a a2a a3a a4a a5a aba aca';
?>
Kirjoita säännöllinen lauseke, joka löytää merkkijonot,
joissa reunoissa on kirjaimet 'a',
ja niiden välissä on yksi numero.
Annettu merkkijono:
<?php
$str = 'a1a a22a a333a a4444a a55555a aba aca';
?>
Kirjoita säännöllinen lauseke, joka löytää merkkijonot,
joissa reunoissa on kirjaimet 'a',
ja niiden välissä on mikä tahansa määrä numeroita.
Annettu merkkijono:
<?php
$str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>
Kirjoita säännöllinen lauseke, joka löytää merkkijonot,
joissa reunoissa on kirjaimet 'a',
ja niiden välissä on mikä tahansa määrä numeroita (mukaan
lukien nolla numeroa, eli merkkijono 'aa').
Annettu merkkijono:
<?php
$str = 'avb a1b a2b a3b a4b a5b abb acb';
?>
Kirjoita säännöllinen lauseke, joka löytää seuraavanlaiset
merkkijonot: reunoissa on kirjaimet
'a' ja 'b', ja niiden välissä - ei
numero.
Annettu merkkijono:
<?php
$str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>
Kirjoita säännöllinen lauseke, joka löytää seuraavanlaiset
merkkijonot: reunoissa on kirjaimet
'a' ja 'b', ja niiden välissä - ei
kirjain eikä numero.
Annettu merkkijono:
<?php
$str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>
Kirjoita säännöllinen lauseke, joka korvaa kaikki välilyönnit
merkillä '!'.