Tavuviiva joukoissa PHP:n säännöllisissä lausekkeissa
Tavuviiva on myös erikoismerkki []-sisällä
(mutta ulkopuolella - ei). Jos tarvitset tavuviivaa
itsessään symbolina - aseta se paikkaan,
jossa sitä ei tulkita ryhmän erottajaksi.
Miksi tämä on tärkeää: voit luoda merkkiryhmän
huomaamatta sitä. Esimerkiksi
näin - [:-@] - luulet valitsevasi
kaksoispisteen, tavuviivan ja @-merkin, mutta
itse asiassa saat merkkiryhmän väliltä
: ja @. Tähän ryhmään kuuluvat
seuraavat merkit: :, ;, ?,
<, =, >.
Mistä ne ovat peräisin? ASCII-taulukosta - kaksoispisteellä on pienempi numero kuin @-merkillä - ja näin muodostuu ryhmä. Eli kaikki ryhmät muodostuvat ASCII-taulukon mukaan (halutessasi tätä voidaan käyttää hyväksi).
Miten tämän kanssa toimitaan: aseta tavuviiva
paikkaan, jossa sitä ei varmasti tulkita
ryhmäsymboliksi, esimerkiksi alussa tai lopussa
(eli [-sulun jälkeen tai ennen ]-sulkua).
Voit myös escapeta tavuviivan - silloin
se tarkoittaa itseään riippumatta
asemasta. Esimerkiksi kirjoita [:\-@]
[:-@]-sijaan - eikä ryhmää enää ole, vaan
on kolme merkkiä - kaksoispiste, tavuviiva ja @-merkki.
Esimerkki
Seuraavassa esimerkissä hakumalli on seuraava:
numero 1, sitten kirjain 'a':sta
'z':aan, sitten numero 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! 1-2 ! !'
Esimerkki
Escapeetaan nyt tavuviiva. Tuloksena
hakumalli on seuraava: numero 1, sitten
kirjain 'a', tai tavuviiva, tai kirjain 'z',
sitten numero 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! 1c2 !'
Esimerkki
Voit yksinkertaisesti siirtää tavuviivan paikkaa escapettamatta sitä:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! 1c2 !'
Esimerkki
Seuraavassa esimerkissä hakumalli on seuraava:
ensimmäinen merkki on pienaakkonen tai
tavuviiva '-', sitten kaksi kirjainta 'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! Axx ! @xx'
Esimerkki
Seuraavassa esimerkissä hakumalli on seuraava:
ensimmäinen merkki on pienaakkonen, suuraakkonen
tai tavuviiva '-', sitten kaksi kirjainta
'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! ! @xx'
Esimerkki
Voit sijoittaa tavuviivan kahden ryhmän väliin - siellä se varmasti ei vielä luo toista ryhmää:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! ! @xx'
Käytännön tehtävät
Annettu merkkijono:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
Etsi kaikki merkkijonot seuraavan mallin mukaan:
kirjain 'x', suuri tai pieni
kirjain tai tavuviiva, kirjain 'z'.
Annettu merkkijono:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
Etsi kaikki merkkijonot seuraavan mallin mukaan:
kirjain 'x', sitten joko dollarimerkki,
tavuviiva tai plusmerkki, sitten kirjain 'z'.