Θήκες στην αντικατάσταση με κανονικές εκφράσεις στην PHP
Όταν εργαζόμαστε με τη συνάρτηση preg_replace,
αν βάλουμε κάτι σε μια θήκη στην κανονική έκφραση,
τότε στη συμβολοσειρά αντικατάστασης μπορούμε να εισαγάγουμε το περιεχόμενο
αυτής της θήκης γράφοντας το σύμβολο δολαρίου $ και τον αριθμό
της θήκης. Για παράδειγμα, $0 - μηδενική θήκη,
$1 - πρώτη θήκη, $2 - δεύτερη
θήκη και ούτω καθεξής.
Γιατί αυτό είναι απαραίτητο και πώς να το χρησιμοποιήσετε ας το δούμε με παραδείγματα.
Παράδειγμα
Ας βρούμε όλους τους αριθμούς και αντί για αυτούς ας εισάγουμε τους ίδιους αριθμούς, αλλά σε άγκιστρα. Για αυτό όλους τους αριθμούς που βρέθηκαν θα αντικαθιστούμε με τους ίδιους, αλλά σε άγκιστρα:
<?php
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
Σαν αποτέλεσμα στη μεταβλητή θα γραφτεί το εξής:
'{1} {23} {456} xax'
Παράδειγμα
Ας βρούμε όλες τις συμβολοσειρές που αντιπροσωπεύουν
αριθμούς με iksa γύρω τους και ας αντικαταστήσουμε αυτούς
τους αριθμούς με τους ίδιους, αλλά με '!' σημάδια γύρω:
<?php
$str = 'x1x x23x x456x xax';
$res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>
Σαν αποτέλεσμα στη μεταβλητή θα γραφτεί το εξής:
'!1! !23! !456! xax'
Παράδειγμα
Ας λύσουμε το ακόλουθο πρόβλημα: δίνονται συμβολοσειρές
της μορφής 'aaa@bbb' - γράμματα, μετά παπάκι,
μετά γράμματα. Πρέπει να ανταλλάξουμε θέσεις τα γράμματα
πριν το '@' και μετά. Ας υλοποιήσουμε:
<?php
$str = 'aaa@bbb ccc@ddd';
$res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>
Σαν αποτέλεσμα στη μεταβλητή θα γραφτεί το εξής:
'bbb@aaa ddd@ccc'
Πρακτικά προβλήματα
Δίνεται συμβολοσειρά:
<?php
$str = '12 34 56 78';
?>
Ανταλλάξτε θέσεις τα ψηφία σε όλους τους διψήφιους αριθμούς.
Δίνεται συμβολοσειρά με ημερομηνία:
<?php
$str = '31.12.2025';
?>
Μετατρέψτε αυτήν την ημερομηνία σε '2025.12.31'.