Taskud regulaaravalduste asendamisel PHP-s
Funktsiooniga preg_replace töötamisel,
kui me paneme regulaaravalduses midagi taskusse,
siis asendusstringis saame selle tasku sisu
sisestada kirjutades dollari märgi $ ja tasku
numbri. Näiteks $0 - nullis tasku,
$1 - esimene tasku, $2 - teine
tasku ja nii edasi.
Miks seda vaja on ja kuidas seda kasutada vaatame näidete varal.
Näide
Leiame kõik numbrid ja nende asemele paneme samad numbrid, kuid lokkis sulgudes. Selleks asendame kõik leitud numbrid nendega isese, kuid lokkis sulgudes:
<?php
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
Tulemusena kirjutatakse muutujasse järgmine:
'{1} {23} {456} xax'
Näide
Leiame kõik stringid, mis esindavad
ümberringi iksikutega numbreid ja asendame need
numbrid endaga, kuid ümber '!' märkidega:
<?php
$str = 'x1x x23x x456x xax';
$res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>
Tulemusena kirjutatakse muutujasse järgmine:
'!1! !23! !456! xax'
Näide
Lahendame järgmise ülesande: on antud stringid
kujul 'aaa@bbb' - tähed, siis @,
siis tähed. On vaja vahetada tähed
enne '@' ja pärast. Rakendame:
<?php
$str = 'aaa@bbb ccc@ddd';
$res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>
Tulemusena kirjutatakse muutujasse järgmine:
'bbb@aaa ddd@ccc'
Praktilised ülesanded
Antud string:
<?php
$str = '12 34 56 78';
?>
Vahetage kõigis kahekohalistes numbrites numbrite kohad.
Antud string kuupäevaga:
<?php
$str = '31.12.2025';
?>
Teisendage see kuupäev kujule '2025.12.31'.