Οι Κανονικές Εκφράσεις (Regular Expressions)
Μια κανονική έκφραση (regular expression) είναι ένα κομμάτι (string) κειμένου που περιέχει ειδικούς κωδικούς που του δίνουν τη δυνατότητα να μπορεί να χρησιμοποιηθεί με κάποιες συναρτήσεις της PHP για εντοπισμό και διαχείριση κειμένου. Για παράδειγμα, η επόμενη είναι μια κανονική έκφραση που κάνει αναζήτηση για το κείμενο PHP :
PHP
Για να μπορέσουμε να χρησιμοποιήσουμε μια κανονική έκφραση, πρέπει να είμαστε εξοικειωμένοι με τις συναρτήσεις των κανονικών εκφράσεων που υπάρχουν στην PHP. Η ereg() είναι η βασικότερη απ’ αυτές και μπορεί να χρησιμοποιηθεί για να καθορίσουμε αν μια κανονική έκφραση ικανοποιείται από ένα συγκεκριμένο string κειμένου. Ας δούμε τον επόμενο κώδικα :
$text = "Κανόνες της PHP!";
if (ereg("PHP", $text)) {
echo( '$το κείμενο περιέχει το string "PHP".' );
} else {
echo( '$το κείμενο δεν περιέχει το string "PHP".' );
}
Σ’ αυτό το παράδειγμα, η κανονική έκφραση ικανοποιείται επειδή το string που είναι αποθηκευμένο στη μεταβλητή $text περιέχει το PHP. Ο παραπάνω κώδικας θα εξάγει συνεπώς τα εξής :
$το κείμενο περιέχει το string "PHP".
Δεν πρέπει να ξεχνάμε όταν τα μονά εισαγωγικά αποτρέπουν την PHP από το να εμφανίσει την τιμή της μεταβλητής $text.
Η eregi() είναι μια συνάρτηση που συμπεριφέρεται σχεδόν παρόμοια με την ereg(), εκτός από το ότι αγνοεί τα πεζά και τα κεφαλαία γράμματα όταν αναζητά ταιριάσματα :
$text = "Τι είναι η Php;";
if (eregi("PHP", $text)) {
echo( '$το κείμενο περιέχει το string "PHP".' );
} else {
echo( '$το κείμενο δεν περιέχει το string "PHP".' );
}
Αυτό εμφανίζει πάλι το ίδιο μήνυμα :
$το κείμενο περιέχει το string "PHP".
Θα δούμε μερικά παραδείγματα για να μάθουμε τη βασική σύνταξη των κανονικών εκφράσεων. Πρώτα απ’ όλα, το σύμβολο caret (Ù) μπορεί να χρησιμοποιηθεί για να δείξει την αρχή ενός string, ενώ το σύμβολο του δολαρίου ($) χρησιμοποιείται για να δείξει το τέλος :
PHP // Ταιριάζει με το "What is PHP?"
ÙPHP // Ταιριάζει με το "PHP rules!", όχι με το "What is PHP?"
PHP$ // Ταιριάζει με το "I love PHP", όχι με το "What is PHP?"
ÙPHP$ // Ταιριάζει με το "PHP" και τίποτα άλλο
Προφανώς, θα υπάρχουν φορές που θα θέλουμε να χρησιμοποιήσουμε τα σύμβολα ^, $ ή και άλλους ειδικούς χαρακτήρες για να συμπεριλάβουμε τον αντίστοιχο χαρακτήρα στο string αναζήτησης. Για να αφαιρέσουμε το ειδικό νόημα ενός χαρακτήρα, προτάσσουμε τον χαρακτήρα \ (backslash), ως εξής :
\$\$\$ // Ταιριάζει με το "Show me the $$$!"
Οι αγκύλες μπορούν να χρησιμοποιηθούν για να ορίσουν ένα σύνολο χαρακτήρων που μπορεί να ταιριάξει. Για παράδειγμα, η ακόλουθη κανονική έκφραση ταιριάζει μ’ ένα μόνο από τα ψηφία 1 έως 5.
[12345] // Ταιριάζει με το "1" και το "3", αλλά όχι με το "a" ή το "12"
Μπορούμε να καθορίσουμε και περιοχές αριθμών ή γραμμάτων.
[1-5] // Το ίδιο όπως προηγουμένως
[a-z] // Ταιριάζει μ’ ένα οποιοδήποτε πεζό γράμμα
[0-9a-zA-Z] // Ταιριάζει μ’ ένα οποιοδήποτε γράμμα ή ψηφίο
Οι χαρακτήρες ?, + και * έχουν επίσης ειδικό νόημα. Συγκεκριμένα, το ? σημαίνει ότι ο προηγούμενος χαρακτήρας είναι προαιρετικός, το + σημαίνει έναν ή περισσότερους από τους προηγούμενους χαρακτήρες και το * σημαίνει κανέναν ή έναν από τους προηγούμενους χαρακτήρες.
bana?na // Ταιριάζει με τα "banana" και "banna",
// αλλά όχι με το "banaana"
bana+na // Ταιριάζει με τα "banana" και "banaana",
// αλλά όχι με το "banna"
bana*na // Ταιριάζει με τα "banna", "banana" και "banaaana",
// αλλά όχι με το "bnana"
Ù[a-zA-z]+$ // Ταιριάζει μ’ ένα οποιοδήποτε string που έχει έναν
// τουλάχιστον χαρακτήρα
Οι παρενθέσεις μπορούν να χρησιμοποιηθούν για να ομαδοποιήσουμε strings και να εφαρμόσουμε τα ?, + ή * σ’ αυτά σαν σύνολο.
ba(na)+na // Ταιριάζει με τα "banana" και "banananana",
// αλλά όχι με το "bana" ή το "banaana"
Ακολουθούν μερικοί κωδικοί για να μπορέσουμε να ταιριάξουμε τους ειδικούς χαρακτήρες στις κανονικές εκφράσεις :
\n // Ταιριάζει μ’ έναν χαρακτήρα νέας γραμμής (newline character)
Ù // Ταιριάζει μ’ έναν οποιονδήποτε χαρακτήρα εκτός από τον
// χαρακτήρα νέας γραμμής
\r // Ταιριάζει μ’ έναν χαρακτήρα carriage return
\t // Ταιριάζει με τον χαρακτήρα tab

LinkBack URL
About LinkBacks







Απάντηση με παράθεση