PHP preg_match(): Κανονικές εκφράσεις (Regex)

Τι είναι η κανονική έκφραση στην PHP;

Κανονική έκφραση PHP γνωστοί και ως regex είναι ισχυροί αλγόριθμοι αντιστοίχισης προτύπων που μπορούν να εκτελεστούν σε μία μόνο έκφραση. Οι κανονικές εκφράσεις χρησιμοποιούν αριθμητικούς τελεστές όπως (+,-,^) για να δημιουργήσουν σύνθετες παραστάσεις. Μπορούν να σας βοηθήσουν να ολοκληρώσετε εργασίες όπως επικύρωση διευθύνσεων email, διεύθυνσης IP κ.λπ.

Γιατί να χρησιμοποιήσετε κανονικές εκφράσεις

  • PHP Οι τυπικές εκφράσεις απλοποιούν τον εντοπισμό μοτίβων σε δεδομένα συμβολοσειρών καλώντας μια μεμονωμένη συνάρτηση. Αυτό μας εξοικονομεί χρόνο κωδικοποίησης.
  • Κατά την επικύρωση εισόδου χρήστη, όπως διεύθυνση email, ονόματα τομέα, αριθμοί τηλεφώνου, διευθύνσεις IP,
  • Επισήμανση λέξεων-κλειδιών στα αποτελέσματα αναζήτησης
  • Κατά τη δημιουργία ενός προσαρμοσμένου προτύπου HTML. Το Regex στην PHP μπορεί να χρησιμοποιηθεί για την αναγνώριση των ετικετών προτύπων και την αντικατάστασή τους με πραγματικά δεδομένα.

Ενσωματωμένες Λειτουργίες κανονικής έκφρασης στην PHP

Η PHP έχει ενσωματώσει συναρτήσεις που μας επιτρέπουν να εργαζόμαστε με κανονικές συναρτήσεις τις οποίες θα μάθουμε σε αυτό το σεμινάριο PHP Regular Expressions. Ας δούμε τις συναρτήσεις τυπικής έκφρασης που χρησιμοποιούνται συνήθως στην PHP.

  • preg_match() στην PHP – αυτή η συνάρτηση χρησιμοποιείται για την εκτέλεση αντιστοίχισης προτύπων στην PHP σε μια συμβολοσειρά. Επιστρέφει true αν βρεθεί αντιστοιχία και false αν δεν βρεθεί αντιστοιχία.
  • preg_split() στην PHP – αυτή η συνάρτηση χρησιμοποιείται για να εκτελέσει μια αντιστοίχιση μοτίβων σε μια συμβολοσειρά και στη συνέχεια να χωρίσει τα αποτελέσματα σε έναν αριθμητικό πίνακα
  • preg_replace() στην PHP – αυτή η συνάρτηση χρησιμοποιείται για να εκτελέσει μια αντιστοίχιση μοτίβων σε μια συμβολοσειρά και στη συνέχεια να αντικαταστήσει την αντιστοίχιση με το καθορισμένο κείμενο.

Παρακάτω είναι η σύνταξη για μια συνάρτηση κανονικής έκφρασης όπως PHP preg_match(), PHP preg_split() ή PHP preg_replace().

<?php
function_name('/pattern/',subject);
?>

ΕΔΩ,

  • Το "function_name(…)" είναι είτε PHP preg_match(), PHP preg_split() ή PHP preg_replace().
  • "/…/" Οι κάθετες προς τα εμπρός υποδηλώνουν την αρχή και το τέλος της συνάρτησης PHP regex tester
  • Το "'/pattern/'" είναι το μοτίβο που πρέπει να ταιριάξουμε
  • Το "θέμα" είναι η συμβολοσειρά κειμένου που πρέπει να αντιστοιχιστεί

Ας δούμε τώρα πρακτικά παραδείγματα που υλοποιούν τις παραπάνω συναρτήσεις regex της PHP.

Preg_match() στην PHP

Το πρώτο παράδειγμα χρησιμοποιεί τη συνάρτηση preg_match() στη συνάρτηση PHP για να εκτελέσει μια απλή αντιστοίχιση προτύπων για τη λέξη γκουρού σε μια δεδομένη διεύθυνση URL.

Ο παρακάτω κώδικας δείχνει την υλοποίηση της συνάρτησης δοκιμαστή preg_match() για το παραπάνω παράδειγμα.

<?php
$my_url = "www.guru99.com";
if (preg_match("/guru/", $my_url))
{
	echo "the url $my_url contains guru";
}
else
{
	echo "the url $my_url does not contain guru";
}
?>

Περιηγηθείτε στη διεύθυνση URL http://localhost/phptuts/preg_match_simple.php

Ενσωματωμένες Λειτουργίες κανονικής έκφρασης

Ας εξετάσουμε το τμήμα του κώδικα που είναι υπεύθυνο για την έξοδο μας "preg_match('/guru/', $my_url)" ΕΔΩ,

  • Το “preg_match(…)” είναι η συνάρτηση regex της PHP
  • Το "'/guru/'" είναι το τυπικό μοτίβο έκφρασης που πρέπει να αντιστοιχιστεί
  • Το "$my_url" είναι η μεταβλητή που περιέχει το κείμενο που πρέπει να αντιστοιχιστεί.

Το παρακάτω διάγραμμα συνοψίζει τα παραπάνω σημεία

PHP Preg_split()

Ας δούμε τώρα ένα άλλο παράδειγμα που χρησιμοποιεί τη preg_split() στη συνάρτηση PHP.

Θα πάρουμε μια φράση συμβολοσειράς και θα την ανατινάξουμε σε έναν πίνακα. το σχέδιο που πρέπει να αντιστοιχιστεί είναι ένας ενιαίος χώρος.

Η συμβολοσειρά κειμένου που θα χρησιμοποιηθεί σε αυτό το παράδειγμα είναι "I Love Regular Expressions".

Ο παρακάτω κώδικας επεξηγεί την υλοποίηση του παραπάνω παραδείγματος.

<?php

$my_text="I Love Regular Expressions";

$my_array  = preg_split("/ /", $my_text);

print_r($my_array );

?>

Περιηγηθείτε στη διεύθυνση URL http://localhost/phptuts/preg_split.php

PHP Preg_split()

PHP Preg_replace()

Ας δούμε τώρα το preg_replace() in Λειτουργία PHP που εκτελεί μια αντιστοίχιση μοτίβου και στη συνέχεια αντικαθιστά το μοτίβο με κάτι άλλο.

Ο παρακάτω κώδικας αναζητά τη λέξη γκουρού στο α κορδόνι.

Αντικαθιστά τη λέξη γκουρού με τη λέξη γκουρού που περιβάλλεται από κώδικα css που τονίζει το χρώμα του φόντου.

<?php

$text = "We at Guru99 strive to make quality education affordable to the masses. Guru99.com";

$text = preg_replace("/Guru/", '<span style="background:yellow">Guru</span>', $text);

echo $text;

?>

Υποθέτοντας ότι έχετε αποθηκεύσει το αρχείο preg_replace.php, περιηγηθείτε στη διεύθυνση URL http://localhost/phptuts/preg_replace.php

PHP Preg_replace()

Μεταχαρακτήρες κανονικής έκφρασης

Τα παραπάνω παραδείγματα χρησιμοποιούσαν πολύ βασικά μοτίβα. Οι μεταχαρακτήρες απλώς μας επιτρέπουν να εκτελούμε πιο σύνθετες αντιστοιχίσεις μοτίβων, όπως τον έλεγχο της εγκυρότητας μιας διεύθυνσης email. Ας δούμε τώρα τους μεταχαρακτήρες που χρησιμοποιούνται συνήθως.

Μεταχαρακτήρας Descriptιόν Παράδειγμα
. Ταιριάζει με οποιονδήποτε μεμονωμένο χαρακτήρα εκτός από μια νέα γραμμή Το /./ ταιριάζει με οτιδήποτε έχει έναν μόνο χαρακτήρα
^ Ταιριάζει με την αρχή ή τη συμβολοσειρά / εξαιρεί χαρακτήρες Το /^PH/ αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που ξεκινά με PH
$ Ταιριάζει με μοτίβο στο τέλος της χορδής Το /com$/ ταιριάζει με guru99.com,yahoo.com κ.λπ.
* Ταιριάζει με μηδέν (0) ή περισσότερους χαρακτήρες Το /com*/ ταιριάζει με υπολογιστή, επικοινωνία κ.λπ.
+ Απαιτείται να εμφανίζονται οι προηγούμενοι χαρακτήρες τουλάχιστον μία φορά Το /yah+oo/ ταιριάζει με το yahoo
\ Χρησιμοποιείται για διαφυγή μετα χαρακτήρων Το /yahoo+\.com/ αντιμετωπίζει την τελεία ως κυριολεκτική τιμή
[...] Κατηγορία χαρακτήρων /[abc]/ ταιριάζει με το abc
Α-Ω Ταιριάζει με πεζά γράμματα Το /az/ ταιριάζει κουλ, χαρούμενο κ.λπ.
Αλφαβητικά: Α-Ω Ταιριάζει με κεφαλαία γράμματα /Α-Ω/ ταιριάζει με ΤΙ, ΠΩΣ, ΓΙΑΤΙ κ.λπ.
0-9 Ταιριάζει με οποιονδήποτε αριθμό μεταξύ 0 και 9 /0-4/ ταιριάζει 0,1,2,3,4

Η παραπάνω λίστα δίνει μόνο τους πιο συχνά χρησιμοποιούμενους μεταχαρακτήρες σε κανονικές εκφράσεις.

Ας δούμε τώρα ένα αρκετά περίπλοκο παράδειγμα που ελέγχει την εγκυρότητα μιας διεύθυνσης email.

<?php
$my_email = "name@company.com";
if (preg_match("/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/", $my_email)) {
echo "$my_email is a valid email address";
}
else
{
  echo "$my_email is NOT a valid email address";
}
?>

Εξήγηση του μοτίβου "[/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/] ”

ΕΔΩ,

  • Το "'/…/'" ξεκινά και τελειώνει την τυπική έκφραση
  • Το "^[a-zA-Z0-9._-]" ταιριάζει με πεζά ή κεφαλαία γράμματα, αριθμούς μεταξύ 0 και 9 και τελείες, κάτω παύλες ή παύλες.
  • Το "+@[a-zA-Z0-9-]" ταιριάζει με το σύμβολο @ ακολουθούμενο από πεζά ή κεφαλαία γράμματα, αριθμούς μεταξύ 0 και 9 ή παύλες.
  • Το "+\.[a-zA-Z.]{2,5}$/" ξεφεύγει από την τελεία χρησιμοποιώντας την ανάστροφη κάθετο και, στη συνέχεια, ταιριάζει με πεζά ή κεφαλαία γράμματα με μήκος χαρακτήρα μεταξύ 2 και 5 στο τέλος της συμβολοσειράς.

Περιηγηθείτε στη διεύθυνση URL http://localhost/phptuts/preg_match.php

[/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/]

Όπως μπορείτε να δείτε από την ανάλυση του παραπάνω παραδείγματος, οι μεταχαρακτήρες είναι πολύ ισχυροί όταν πρόκειται για αντιστοίχιση μοτίβων.

Σύνοψη

  • Μια κανονική έκφραση ή Regex στην PHP είναι ένας αλγόριθμος αντιστοίχισης προτύπων
  • Οι τυπικές εκφράσεις είναι πολύ χρήσιμες κατά την εκτέλεση ελέγχων επικύρωσης, τη δημιουργία συστημάτων προτύπων HTML που αναγνωρίζουν ετικέτες κ.λπ.
  • PHP έχει ενσωματώσει συναρτήσεις και συγκεκριμένα PHP preg_match(), PHP preg_split() και PHP preg_replace() που υποστηρίζουν κανονικές εκφράσεις.
  • Οι μεταχαρακτήρες μας επιτρέπουν να δημιουργήσουμε πολύπλοκα μοτίβα