Säälimat säännöllisten lausekkeiden korvauksissa PHP:ssä
Kun työskentelet funktion preg_replace kanssa,
jos laitamme jotain säkkiin säännöllisessä lausekkeessa,
voimme korvausmerkkijonossa lisätä tämän
säkin sisällön kirjoittamalla dollarimerkin $ ja
säkin numeron. Esimerkiksi, $0 - nollas säkki,
$1 - ensimmäinen säkki, $2 - toinen
säkki ja niin edelleen.
Mitä varten tätä tarvitaan ja kuinka sitä käytetään, katsotaan esimerkkien avulla.
Esimerkki
Etsitään kaikki numerot ja korvataan ne samalla numerolla, mutta aaltosulkeissa. Tätä varten kaikki löydetyt numerot korvataan itsellään, mutta aaltosulkeissa:
<?php
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'{1} {23} {456} xax'
Esimerkki
Etsitään kaikki merkkijonot, jotka edustavat
numeroita x-merkeillä ympäröitynä ja korvataan nämä
numeroit samalla, mutta '!' -merkeillä ympäröitynä:
<?php
$str = 'x1x x23x x456x xax';
$res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'!1! !23! !456! xax'
Esimerkki
Ratkaistaan seuraava tehtävä: annettu merkkijonoja
muodossa 'aaa@bbb' - kirjaimia, sitten @-merkki,
sitten kirjaimia. Kirjaimet ennen
'@' -merkkiä ja jälkeen tulee vaihtaa paikkoja. Toteutetaan:
<?php
$str = 'aaa@bbb ccc@ddd';
$res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>
Tuloksena muuttujaan kirjoitetaan seuraava:
'bbb@aaa ddd@ccc'
Käytännön tehtävät
Annettu merkkijono:
<?php
$str = '12 34 56 78';
?>
Vaihda numeroiden paikkoja kaikissa kaksinumeroisissa luvuissa.
Annettu merkkijono päivämäärällä:
<?php
$str = '31.12.2025';
?>
Muunna tämä päivämäärä muotoon '2025.12.31'.