Espressioni regolari MYSQL (REGEXP) con sintassi ed esempi

Cosa sono le espressioni regolari?

Le espressioni regolari aiutano a cercare dati che corrispondono a criteri complessi. Abbiamo esaminato i caratteri jolly nel tutorial precedente. Se hai già lavorato con i caratteri jolly, potresti chiederti perché imparare le espressioni regolari quando puoi ottenere risultati simili usando i caratteri jolly. Perché, rispetto ai caratteri jolly, le espressioni regolari ci consentono di cercare dati che corrispondono a criteri ancora più complessi.

Sintassi di base

La sintassi di base per un'espressione regolare è la seguente

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

QUI -

  • "Istruzioni SELEZIONATE..." è lo standard Istruzione SELECT
  • “DOVE nome campo” è il nome della colonna su cui deve essere eseguita l'espressione regolare.
  • “Modello REGEXP”” REGEXP è l'operatore dell'espressione regolare e 'pattern' rappresenta il modello a cui deve corrispondere REGEXP. RLIKE Europe è sinonimo di REGEXP e ottiene gli stessi risultati di REGEXP. Per evitare di confonderlo con l'operatore LIKE, it meglio usare REGEXP anziché.

Vediamo ora un esempio pratico:

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

La query precedente cerca tutti i titoli di film che contengono la parola codice. Non importa se il "codice" si trova all'inizio, al centro o alla fine del titolo. Finché sarà contenuto nel titolo verrà preso in considerazione.

Supponiamo di voler cercare film che iniziano con a, b, c o d , seguiti da un numero qualsiasi di altri caratteri, come potremmo raggiungere questo obiettivo. Possiamo utilizzare un'espressione regolare insieme ai metacaratteri per ottenere i risultati desiderati.

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

Eseguendo lo script precedente in MySQL banco di lavoro rispetto a myflixdb ci fornisce i seguenti risultati.

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

Diamo ora un'occhiata da vicino alla nostra espressione regolare responsabile del risultato sopra.

'^[abcd]' l'accento circonflesso (^) significa che il modello di corrispondenza deve essere applicato all'inizio e l'elenco dei caratteri [abcd] significa che solo i titoli di film che iniziano con a, b, c o d vengono restituiti nel nostro set di risultati.

Modifichiamo il nostro script precedente e utilizziamo NOT charlist e vediamo quali risultati otterremo dopo aver eseguito la nostra query.

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

Eseguendo lo script precedente in MySQL workbench su myflixdb ci fornisce i seguenti risultati.

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

Diamo ora un'occhiata più da vicino alla nostra espressione regolare responsabile dei risultati di cui sopra.

'^[^abcd]' l'accento circonflesso (^) significa che la corrispondenza del modello deve essere applicata all'inizio e l'elenco dei caratteri [^abcd] significa che i titoli dei film che iniziano con uno qualsiasi dei caratteri racchiusi sono esclusi dal set di risultati.

Metacaratteri delle espressioni regolari

Ciò che abbiamo visto nell'esempio precedente è la forma più semplice di un'espressione regolare. Esaminiamo ora le corrispondenze di modelli di espressioni regolari più avanzate. Supponiamo di voler cercare i titoli dei film che iniziano con il modello "code" solo utilizzando un'espressione regolare, come potremmo farlo? La risposta sono i metacaratteri. Ci consentono di ottimizzare i risultati della ricerca di pattern utilizzando le espressioni regolari.

carbonizzare Descrizione Esempio
* asterisco (*) il metacarattere viene utilizzato per corrispondere a zero (0) o più istanze delle stringhe che lo precedono SELEZIONA * DA film DOVE titolo REGEXP 'da*'; darà a tutti i film contenenti i personaggi "da". Ad esempio, il Codice Da Vinci, Le bambine di papà.
+ più (+) il metacarattere viene utilizzato per corrispondere a una o più istanze di stringhe che lo precedono. SELEZIONA * DA `film` DOVE `titolo` REGEXP 'mon+'; darà a tutti i film contenenti personaggi "mon". Ad esempio, Angeli e Demoni.
? La questione(?) il metacarattere viene utilizzato per trovare la corrispondenza con zero (0) o una istanza delle stringhe che lo precedono. SELECT * FROM `categories` WHERE `category_name` REGEXP 'com?'; fornirà tutte le categorie contenenti string com. Ad esempio, commedia, commedia romantica.
. punto (.) il metacarattere viene utilizzato per corrispondere a qualsiasi singolo carattere ad eccezione di una nuova riga. SELEZIONA * DA film DOVE `anno_pubblicato` REGEXP '200.'; fornirà tutti i film usciti negli anni che iniziano con i caratteri "200" seguiti da un singolo carattere. Ad esempio, 2005,2007,2008 ecc.
[ABC] carlista [abc] viene utilizzato per corrispondere a uno qualsiasi dei caratteri racchiusi. SELEZIONA * FROM `film` DOVE `titolo` REGEXP '[vwxyz]'; fornirà tutti i film contenenti un singolo personaggio in "vwxyz". Ad esempio, X-Men, Codice Da Vinci, ecc.
[^abc] carlista [^abc] viene utilizzato per corrispondere a qualsiasi carattere esclusi quelli racchiusi. SELECT * FROM `film` WHERE `titolo` REGEXP '^[^vwxyz]'; fornirà tutti i film contenenti personaggi diversi da quelli in "vwxyz".
[AZ] [AZ] viene utilizzato per corrispondere a qualsiasi lettera maiuscola. SELECT * FROM `membri` WHERE `indirizzo_postale` REGEXP '[AZ]'; fornirà a tutti i membri che hanno un indirizzo postale contenente qualsiasi carattere dalla A alla Z. Ad esempio, Janet Jones con numero di iscrizione 1.
[az] [az] viene utilizzato per corrispondere a qualsiasi lettera minuscola SELECT * FROM `membri` WHERE `indirizzo_postale` REGEXP '[az]'; darà a tutti i membri che hanno indirizzi postali contenenti qualsiasi carattere dalla a alla z. .Ad esempio, Janet Jones con il numero di iscrizione 1.
[0-9] [0-9] viene utilizzato per corrispondere a qualsiasi cifra da 0 a 9. SELECT * FROM `membri` WHERE `numero_contatto` REGEXP '[0-9]' fornirà a tutti i membri che hanno inviato numeri di contatto contenenti i caratteri "[0-9]". Ad esempio, Robert Phil.
^ accento circonflesso (^) viene utilizzato per iniziare la partita dall'inizio. SELECT * FROM `film` WHERE `titolo` REGEXP '^[cd]'; fornisce tutti i film il cui titolo inizia con uno qualsiasi dei personaggi in "cd". Ad esempio, Nome in codice Nero, Daddy's Little Girls e Codice Da Vinci.
| barra verticale (|) viene utilizzato per isolare le alternative. SELECT * FROM `film` WHERE `titolo` REGEXP '^[cd]|^[u]'; fornisce tutti i film il cui titolo inizia con uno qualsiasi dei personaggi in "cd" o "u". Ad esempio, Nome in codice Nero, La bambina di papà, Codice Da Vinci e Underworld – AwakenING.
[[:<:]] [[:<:]] corrisponde all'inizio delle parole. SELECT * FROM `film` WHERE `titolo` REGEXP '[[:<:]]for';

fornisce tutti i film i cui titoli iniziano con i personaggi. Ad esempio: dimenticare Sarah Marshal.

[[:>:]] [[:>:]] corrisponde alla fine delle parole. SELECT * FROM `movies` WHERE `title` REGEXP 'ack[[:>:]]';

fornisce tutti i film i cui titoli terminano con i caratteri "ack"

.Ad esempio, nome in codice Nero.

[:classe:] [:classe:] corrisponde a una classe di caratteri, ad es

[:alfa:] per abbinare le lettere, [:spazio:] per abbinare lo spazio bianco, [:punta:] corrisponde alla punteggiatura e a [:upper:] per le lettere di classe superiore.

SELECT * FROM `film` WHERE `titolo` REGEXP '[:alpha:]';

dà a tutti i film i cui titoli contengono solo lettere

.Ad esempio, Dimenticando Sarah Marshal, X-Men ecc.

Film come Pirati dei Caraibi 4 verranno omessi da questa query.

La barra rovesciata (\) è usata come carattere di escape. Se vogliamo usarla come parte del pattern in un'espressione regolare, dovremmo usare doppie barre rovesciate (\\)

Sommario

  • Le espressioni regolari forniscono una corrispondenza di pattern potente e flessibile che può aiutarci a implementare potenti utilità di ricerca per i nostri sistemi di database.
  • REGEXP è l'operatore utilizzato quando si eseguono corrispondenze di modelli di espressioni regolari. RLIKE è il sinonimo
  • Le espressioni regolari supportano una serie di metacaratteri che consentono maggiore flessibilità e controllo durante l'esecuzione delle corrispondenze dei modelli.
  • La barra rovesciata è usata come carattere di escape nelle espressioni regolari. Viene presa in considerazione nel pattern match solo se sono state usate barre rovesciate doppie.
  • Le espressioni regolari non fanno distinzione tra maiuscole e minuscole.