Θήκες κατά την αναζήτηση με κανονικές εκφράσεις στην PHP
Ας υποθέσουμε ότι έχουμε μια συγκεκριμένη συμβολοσειρά που περιέχει ένα domain:
<?php
$str = 'eee site.ru bbb';
?>
Ας βρούμε αυτό το domain και ας το χωρίσουμε σε μέρη: ας διαχωρίσουμε το όνομα του domain από τη ζώνη του. Για αυτό, θα χρησιμοποιήσουμε ειδικές θήκες των κανονικών εκφράσεων.
Οι θήκες αντιπροσωπεύουν στοιχεία ενός πίνακα, στα οποία μπορούν να τοποθετηθούν μέρη που βρέθηκαν από την κανονική έκφραση. Στη δική μας περίπτωση, στην πρώτη θήκη μπορούμε να τοποθετήσουμε το όνομα του domain, και στη δεύτερη - τη ζώνη του.
Ας το κάνουμε. Αρχικά, ας γράψουμε την κανονική έκφραση που βρίσκει το domain στη συμβολοσειρά:
<?php
$reg = '#[a-z0-9_-]+\.[a-z]{2,}#';
?>
Ας ορίσουμε τώρα στην κανονική μας έκφραση ποια μέρη πρέπει να πάνε σε ποια θήκη. Αυτό γίνεται με τη χρήση στρογγυλών παρενθέσεων. Ας ξεχωρίσουμε με αυτές το μέρος της κανονικής έκφρασης που αναζητά το όνομα του domain, και το μέρος που αναζητά τη domain ζώνη:
<?php
$reg = '#([a-z0-9_-]+)\.([a-z]{2,})#';
?>
Τώρα στη συνάρτηση preg_match ως
τρίτη παράμετρο θα ορίσουμε μια μεταβλητή (οποιοδήποτε όνομα):
<?php
preg_match($reg, $str, $res);
?>
Στην καθορισμένη μεταβλητή θα πέσει ένας πίνακας με τις θήκες που βρέθηκαν. Σε αυτήν την περίπτωση, στο μηδενικό στοιχείο του πίνακα θα βρίσκεται η συμβολοσειρά που βρέθηκε, στο πρώτο στοιχείο - η πρώτη θήκη, στο δεύτερο στοιχείο - η δεύτερη θήκη και ούτω καθεξής:
<?php
preg_match($reg, $str, $res);
var_dump($res); // θα εκτυπώσει ['site.ru', 'site', 'ru']
?>
Δίνεται μια συμβολοσειρά με ημερομηνία:
<?php
$str = '2025-12-31';
?>
Τοποθετήστε το έτος, το μήνα και την ημέρα σε ξεχωριστές θήκες.
Δίνεται μια συμβολοσειρά με όνομα αρχείου:
<?php
$str = 'index.html';
?>
Τοποθετήστε το όνομα του αρχείου και την επέκτασή του σε ξεχωριστές θήκες.