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.