Ομάδες χαρακτήρων στις κανονικές εκφράσεις PHP
Υπάρχουν ειδικές εντολές που επιτρέπουν
την επιλογή αμέσως ολόκληρων ομάδων χαρακτήρων. Η εντολή
\d σημαίνει ψηφίο από 0 έως 9.
Η εντολή \w δηλώνει ψηφίο, λατινικό
γράμμα ή τον χαρακτήρα υπογράμμισης. Η εντολή \s
δηλώνει κενό ή χαρακτήρα κενού:
κενό, αλλαγή γραμμής, ταμπουλάτορα. Μπορείτε
να αντιστρέψετε την τιμή της εντολής, γράφοντας κεφαλαίο
γράμμα: για παράδειγμα, εάν \d - ψηφίο,
τότε \D - όχι ψηφίο.
Παράδειγμα
Ας βρούμε όλα τα ψηφία:
<?php
$str = '1 12 123';
$res = preg_replace('#\d#', '!', $str);
?>
Ως αποτέλεσμα, στη μεταβλητή θα γραφτεί το εξής:
'! !! !!!'
Παράδειγμα
Οι τελεστές επανάληψης θεωρούν τις εντολές-ομάδες
ως ένα σύνολο, δηλαδή οι ομαδοποιητικές αγκύλες
δεν είναι απαραίτητες. Στο επόμενο παράδειγμα το μοτίβο αναζήτησης
φαίνεται ως εξής: ψηφίο από 0 έως 9
μία ή περισσότερες φορές:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\d+#', '!', $str);
?>
Ως αποτέλεσμα, στη μεταβλητή θα γραφτεί το εξής:
'! ! ! abc @@@'
Παράδειγμα
Στο επόμενο παράδειγμα το μοτίβο αναζήτησης φαίνεται
ως εξής: οτιδήποτε μία ή περισσότερες φορές,
αλλά όχι ψηφίο από 0 έως 9:
<?php
$str = '123abc3@@';
$res = preg_replace('#\D+#', '!', $str);
?>
Ως αποτέλεσμα, στη μεταβλητή θα γραφτεί το εξής:
'123!3!'
Παράδειγμα
Σε αυτό το παράδειγμα το μοτίβο αναζήτησης φαίνεται ως εξής: χαρακτήρας κενού μία φορά:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\s#', '!', $str);
?>
Ως αποτέλεσμα, στη μεταβλητή θα γραφτεί το εξής:
'1!12!123!abc!@@@'
Παράδειγμα
Σε αυτό το παράδειγμα το μοτίβο αναζήτησης φαίνεται ως εξής:
ΟΧΙ χαρακτήρας κενού μία ή περισσότερες φορές.
Όλες οι υποσυμβολοσειρές, που χωρίζονται με κενά, θα αντικατασταθούν
με '!':
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\S+#', '!', $str);
?>
Ως αποτέλεσμα, στη μεταβλητή θα γραφτεί το εξής:
'! ! ! ! !'
Παράδειγμα
Σε αυτό το παράδειγμα το μοτίβο αναζήτησης φαίνεται ως εξής:
ψηφίο ή γράμμα μία ή περισσότερες φορές.
Όλες οι υποσυμβολοσειρές, που αποτελούνται από ψηφία και γράμματα,
θα αντικατασταθούν με '!':
<?php
$str = '1 12 123a Abc @@@';
$res = preg_replace('#\w+#', '!', $str);
?>
Ως αποτέλεσμα, στη μεταβλητή θα γραφτεί το εξής:
'! ! ! ! @@@'
Παράδειγμα
Σε αυτό το παράδειγμα το μοτίβο αναζήτησης φαίνεται ως εξής:
ΟΧΙ ψηφίο και ΟΧΙ γράμμα μία ή περισσότερες φορές.
Σύμφωνα με αυτόν τον ορισμό στην περίπτωσή μας εμπίπτει
'@@@' και όλα τα κενά (αφού και αυτά
δεν είναι ψηφία ούτε γράμματα). Προσέξτε
το γεγονός ότι στο τέλος υπάρχει ένα '!' - σε αυτό
μετατράπηκε η συμβολοσειρά ' @@@' - με
κενό μπροστά:
$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);
Ως αποτέλεσμα, στη μεταβλητή θα γραφτεί το εξής:
'1!12!123!Abc!'
Πρακτικές ασκήσεις
Δίνεται συμβολοσειρά:
<?php
$str = 'a1a a2a a3a a4a a5a aba aca';
?>
Γράψτε μια κανονική έκφραση που θα βρει συμβολοσειρές,
στις οποίες στα άκρα υπάρχουν γράμματα 'a',
και ανάμεσά τους ένα ψηφίο.
Δίνεται συμβολοσειρά:
<?php
$str = 'a1a a22a a333a a4444a a55555a aba aca';
?>
Γράψτε μια κανονική έκφραση που θα βρει συμβολοσειρές,
στις οποίες στα άκρα υπάρχουν γράμματα 'a',
και ανάμεσά τους οποιοσδήποτε αριθμός ψηφίων.
Δίνεται συμβολοσειρά:
<?php
$str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>
Γράψτε μια κανονική έκφραση που θα βρει συμβολοσειρές,
στις οποίες στα άκρα υπάρχουν γράμματα 'a',
και ανάμεσά τους οποιοσδήποτε αριθμός ψηφίων (συμπεριλαμβανομένου
και του μηδενός ψηφίων, δηλαδή η συμβολοσειρά 'aa').
Δίνεται συμβολοσειρά:
<?php
$str = 'avb a1b a2b a3b a4b a5b abb acb';
?>
Γράψτε μια κανονική έκφραση που θα βρει συμβολοσειρές
του ακόλουθου τύπου: στα άκρα υπάρχουν γράμματα
'a' και 'b', και ανάμεσά τους - όχι
αριθμός.
Δίνεται συμβολοσειρά:
<?php
$str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>
Γράψτε μια κανονική έκφραση που θα βρει συμβολοσειρές
του ακόλουθου τύπου: στα άκρα υπάρχουν γράμματα
'a' και 'b', και ανάμεσά τους - όχι
γράμμα και όχι ψηφίο.
Δίνεται συμβολοσειρά:
<?php
$str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>
Γράψτε μια κανονική έκφραση που θα αντικαταστήσει όλα τα κενά
με '!'.