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<?php
  $str = '1 23 456 xax';
  $res = preg_replace('#(\d+)#', '{$1}', $str);
?>

Tuloksena muuttujaan kirjoitetaan seuraava:

php'{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<?php
  $str = 'x1x x23x x456x xax';
  $res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>

Tuloksena muuttujaan kirjoitetaan seuraava:

php'!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<?php
  $str = 'aaa@bbb ccc@ddd';
  $res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>

Tuloksena muuttujaan kirjoitetaan seuraava:

php'bbb@aaa ddd@ccc'

Käytännön tehtävät

Задание 1

Annettu merkkijono:

php<?php
  $str = '12 34 56 78';
?>

Vaihda numeroiden paikkoja kaikissa kaksinumeroisissa luvuissa.

Задание 2

Annettu merkkijono päivämäärällä:

php<?php
  $str = '31.12.2025';
?>

Muunna tämä päivämäärä muotoon '2025.12.31'.