Κανονικές εκφράσεις MYSQL (REGEXP) με Σύνταξη & Παραδείγματα

Τι είναι οι κανονικές εκφράσεις;

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

Βασική σύνταξη

Η βασική σύνταξη για μια κανονική έκφραση είναι η εξής

SELECT statements... WHERE fieldname REGEXP 'pattern';

ΕΔΩ -

  • «ΕΠΙΛΕΞΤΕ δηλώσεις…» είναι το πρότυπο Δήλωση SELECT
  • "WHERE όνομα πεδίου" είναι το όνομα της στήλης στην οποία θα εκτελεστεί η τυπική έκφραση.
  • “Μοτίβο REGEXP” Το REGEXP είναι ο τελεστής τυπικής έκφρασης και το 'μοτίβο' αντιπροσωπεύει το μοτίβο που πρέπει να αντιστοιχιστεί από το REGEXP. RLIKE είναι το συνώνυμο του REGEXP και επιτυγχάνει τα ίδια αποτελέσματα με το REGEXP. Για να μην το μπερδέψετε με τον τελεστή LIKE, το καλύτερα να χρησιμοποιήσετε το REGEXP Αντιθέτως.

Ας δούμε τώρα ένα πρακτικό παράδειγμα-

SELECT * FROM `movies` WHERE `title` REGEXP 'code';

Το παραπάνω ερώτημα αναζητά όλους τους τίτλους ταινιών που έχουν τον κωδικό λέξης μέσα τους. Δεν έχει σημασία αν ο «κωδικός» βρίσκεται στην αρχή, στη μέση ή στο τέλος του τίτλου. Εφόσον περιέχεται στον τίτλο τότε θα ληφθεί υπόψη.

Ας υποθέσουμε ότι θέλουμε να αναζητήσουμε ταινίες που ξεκινούν με a, b, c ή d, ακολουθούμενες από οποιονδήποτε αριθμό άλλων χαρακτήρων, πώς θα το πετύχουμε αυτό. Μπορούμε να χρησιμοποιήσουμε μια τυπική έκφραση μαζί με τους μεταχαρακτήρες για να επιτύχουμε τα επιθυμητά αποτελέσματα.

SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

Εκτέλεση του παραπάνω σεναρίου στο MySQL πάγκος εργασίας ενάντια στο myflixdb μας δίνει τα ακόλουθα αποτελέσματα.

movie_id title director year_released category_id
4 Code Name Black Edgar Jimz 2010 NULL
5 Daddy's Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Davinci Code NULL 2007 6

Ας ρίξουμε τώρα μια προσεκτική ματιά στην τυπική μας έκφραση που είναι υπεύθυνη για το παραπάνω αποτέλεσμα.

'^[abcd]' το καρέ (^) σημαίνει ότι η αντιστοίχιση μοτίβου θα πρέπει να εφαρμοστεί στην αρχή και η charlist [abcd] σημαίνει ότι μόνο οι τίτλοι ταινιών που ξεκινούν με a, b, c ή d επιστρέφονται στο σύνολο αποτελεσμάτων μας.

Ας τροποποιήσουμε το παραπάνω σενάριο μας και ας χρησιμοποιήσουμε το NOT charlist και ας δούμε τι αποτελέσματα θα έχουμε μετά την εκτέλεση του ερώτημά μας.

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

Εκτέλεση του παραπάνω σεναρίου στο MySQL Ο πάγκος εργασίας έναντι του myflixdb μας δίνει τα ακόλουθα αποτελέσματα.

movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
3 X-Men 2008
9 Honey mooners John Schultz 2005 8
16 67% Guilty 2012
17 The Great Dictator Chalie Chaplie 1920 7
18 sample movie Anonymous 8
19 movie 3 John Brown 1920 8

Ας ρίξουμε τώρα μια προσεκτική ματιά στην κανονική μας έκφραση που είναι υπεύθυνη για τα παραπάνω αποτελέσματα.

'^[^abcd]' το καρέ (^) σημαίνει ότι η αντιστοίχιση μοτίβου πρέπει να εφαρμοστεί στην αρχή και η λίστα χαρακτήρων [^abcd] σημαίνει ότι οι τίτλοι των ταινιών που ξεκινούν με οποιονδήποτε από τους εσώκλειστους χαρακτήρες εξαιρούνται από το σύνολο αποτελεσμάτων.

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

Αυτό που εξετάσαμε στο παραπάνω παράδειγμα είναι η απλούστερη μορφή μιας κανονικής έκφρασης. Ας δούμε τώρα πιο προηγμένες αντιστοιχίσεις μοτίβων τυπικής έκφρασης. Ας υποθέσουμε ότι θέλουμε να αναζητήσουμε τίτλους ταινιών που ξεκινούν με το μοτίβο «κώδικας» χρησιμοποιώντας μόνο μια κανονική έκφραση, πώς θα το κάνουμε; Η απάντηση είναι μεταχαρακτήρες. Μας επιτρέπουν να συντονίζουμε τα αποτελέσματα αναζήτησης μοτίβων χρησιμοποιώντας κανονικές εκφράσεις.

Char Descriptιόν Παράδειγμα
* The αστερίσκος (*) Ο μεταχαρακτήρας χρησιμοποιείται για να ταιριάζει με μηδέν (0) ή περισσότερες περιπτώσεις των συμβολοσειρών που προηγούνται ΕΠΙΛΟΓΗ * ΑΠΟ ταινίες ΟΠΟΥ ο τίτλος REGEXP 'da*'; θα δώσει σε όλες τις ταινίες που περιέχουν χαρακτήρες "da" .Για παράδειγμα, Da Vinci Code , Daddy's Little Girls.
+ The συν (+) Ο μεταχαρακτήρας χρησιμοποιείται για να ταιριάξει μία ή περισσότερες περιπτώσεις συμβολοσειρών που προηγούνται του. ΕΠΙΛΕΞΤΕ * ΑΠΟ «ταινίες» ΟΠΟΥ «τίτλος» REGEXP «μον+»; θα δώσει σε όλες τις ταινίες που περιέχουν χαρακτήρες "mon" .Για παράδειγμα, Angels and Demons.
? Το ερώτημα(?) Ο μεταχαρακτήρας χρησιμοποιείται για να ταιριάξει το μηδέν (0) ή ένα στιγμιότυπο των συμβολοσειρών που προηγούνται του. SELECT * FROM `categories` WHERE `category_name` REGEXP 'com?'; θα δώσει όλες τις κατηγορίες που περιέχουν string com .Για παράδειγμα, κωμωδία , ρομαντική κομεντί .
. The τελεία (.) Ο μεταχαρακτήρας χρησιμοποιείται για την αντιστοίχιση οποιουδήποτε μεμονωμένου χαρακτήρα, εκτός από μια νέα γραμμή. ΕΠΙΛΟΓΗ * ΑΠΟ ταινίες WHERE `year_released` REGEXP '200.'; θα δώσει όλες τις ταινίες που κυκλοφόρησαν τα χρόνια ξεκινώντας με χαρακτήρες «200» ακολουθούμενοι από οποιονδήποτε μεμονωμένο χαρακτήρα. Για παράδειγμα, 2005,2007,2008, XNUMX, XNUMX κ.λπ.
[αλφάβητο] The charlist [abc] χρησιμοποιείται για να ταιριάζει με οποιονδήποτε από τους εσώκλειστους χαρακτήρες. ΕΠΙΛΟΓΗ * ΑΠΟ "ταινίες" ΟΠΟΥ "τίτλος" REGEXP "[vwxyz]"; θα δώσει όλες τις ταινίες που περιέχουν οποιονδήποτε μεμονωμένο χαρακτήρα στο "vwxyz" . Για παράδειγμα, X-Men, Κώδικας Ντα Βίντσι, κ.λπ.
[^ abc] The charlist [^abc] χρησιμοποιείται για να ταιριάζει με οποιουσδήποτε χαρακτήρες εκτός από αυτούς που εσωκλείονται. SELECT * FROM `movies` WHERE `title` REGEXP '^[^vwxyz]'; θα δώσει όλες τις ταινίες που περιέχουν άλλους χαρακτήρες εκτός από αυτούς στο "vwxyz".
[ΑΖ] The [ΑΖ] χρησιμοποιείται για να ταιριάζει με οποιοδήποτε κεφαλαίο γράμμα. SELECT * FROM `members` WHERE `postal_address` REGEXP '[AZ]'; θα δώσει όλα τα μέλη που έχουν ταχυδρομική διεύθυνση που περιέχει οποιονδήποτε χαρακτήρα από το Α έως το Ω. Για παράδειγμα, η Janet Jones με αριθμό μέλους 1.
[αζ] The [αζ] χρησιμοποιείται για να ταιριάζει με οποιοδήποτε πεζό γράμμα SELECT * FROM `members` WHERE `postal_address` REGEXP '[az]'; θα δώσει όλα τα μέλη που έχουν ταχυδρομικές διευθύνσεις που περιέχουν οποιονδήποτε χαρακτήρα από το a έως το z. .Για παράδειγμα, η Janet Jones με αριθμό μέλους 1.
[0-9] The [0-9] χρησιμοποιείται για να ταιριάζει με οποιοδήποτε ψηφίο από το 0 έως το 9. SELECT * FROM `members` WHERE `contact_number` REGEXP '[0-9]' θα δώσει όλα τα μέλη να έχουν υποβάλει αριθμούς επικοινωνίας που περιέχουν χαρακτήρες "[0-9]". Για παράδειγμα, Robert Phil.
^ The καρέ (^) χρησιμοποιείται για την έναρξη του αγώνα στην αρχή. SELECT * FROM `movies` WHERE `title` REGEXP '^[cd]'; δίνει όλες τις ταινίες με τίτλο που ξεκινά με οποιονδήποτε από τους χαρακτήρες του "cd". Για παράδειγμα, Code Name Black, Daddy's Little Girls και Da Vinci Code.
| The κάθετη μπάρα (|) χρησιμοποιείται για την απομόνωση εναλλακτικών. SELECT * FROM `movies` WHERE `title` REGEXP '^[cd]|^[u]'; δίνει όλες τις ταινίες με τίτλο που ξεκινά με οποιονδήποτε από τους χαρακτήρες στο "cd" ή "u" . Για παράδειγμα, Code Name Black, Daddy's Little Girl, Da Vinci Code και Underworld – AwakenING.
[[:<:]] The[[:<:]] ταιριάζει με την αρχή των λέξεων. SELECT * FROM `movies` WHERE `title` REGEXP '[[:<:]]for';

δίνει όλες τις ταινίες με τίτλους που ξεκινούν από τους χαρακτήρες. Για παράδειγμα: Ξεχνώντας τη Σάρα Μάρσαλ.

[[:>:]] The [[:>:]] ταιριάζει με το τέλος των λέξεων. ΕΠΙΛΕΞΤΕ * ΑΠΟ "movies" WHERE "title" REGEXP "ack[[:>:]]";

δίνει όλες τις ταινίες με τίτλους που τελειώνουν με τους χαρακτήρες "ack"

.Για παράδειγμα, κωδικός όνομα Μαύρο.

[:τάξη:] The [:τάξη:] ταιριάζει με μια κατηγορία χαρακτήρων π.χ

[:άλφα:] να ταιριάζουν γράμματα, [:χώρος:] για να ταιριάζει με το λευκό διάστημα, [:punct:] είναι τα σημεία στίξης αντιστοίχισης και [:upper:] για γράμματα ανώτερης κατηγορίας.

SELECT * FROM `movies` WHERE `title` REGEXP '[:alpha:]';

δίνει όλες τις ταινίες με τίτλους να περιέχουν μόνο γράμματα

.Για παράδειγμα, Forgetting Sarah Marshal, X-Men κ.λπ.

Ταινίες όπως οι Pirates of the Caribbean 4 θα παραληφθούν από αυτό το ερώτημα.

Η ανάστροφη κάθετο (\) χρησιμοποιείται ως χαρακτήρας διαφυγής. Εάν θέλουμε να το χρησιμοποιήσουμε ως μέρος του μοτίβου σε μια τυπική έκφραση, θα πρέπει να χρησιμοποιήσουμε διπλές ανάστροφες κάθετες (\\)

Σύνοψη

  • Οι τυπικές εκφράσεις παρέχουν μια ισχυρή και ευέλικτη αντιστοίχιση προτύπων που μπορεί να μας βοηθήσει να εφαρμόσουμε βοηθητικά προγράμματα τροφοδοσίας αναζήτησης για τα συστήματα βάσης δεδομένων μας.
  • Το REGEXP είναι ο τελεστής που χρησιμοποιείται κατά την εκτέλεση αντιστοιχίσεων μοτίβων τυπικών εκφράσεων. Το RLIKE είναι το συνώνυμο
  • Οι κανονικές εκφράσεις υποστηρίζουν έναν αριθμό μεταχαρακτόρων που επιτρέπουν μεγαλύτερη ευελιξία και έλεγχο κατά την εκτέλεση αντιστοιχίσεων μοτίβων.
  • Η ανάστροφη κάθετο χρησιμοποιείται ως χαρακτήρας διαφυγής σε κανονικές εκφράσεις. Λαμβάνεται υπόψη μόνο στην αντιστοίχιση μοτίβου εάν έχουν χρησιμοποιηθεί διπλές ανάστροφες κάθετες.
  • Οι τυπικές εκφράσεις δεν κάνουν διάκριση πεζών-κεφαλαίων.

Ημερήσιο ενημερωτικό δελτίο Guru99

Ξεκινήστε τη μέρα σας με τις πιο πρόσφατες και πιο σημαντικές ειδήσεις για την Τεχνητή Νοημοσύνη, τώρα.