MYSQL Regular Expressions (REGEXP) con sintassi & Esempi

Anonim

Cosa sono le espressioni regolari?

Le espressioni regolari aiutano a cercare i 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 SELECT ..." è l'istruzione SELECT standard
  • "WHERE fieldname" è il nome della colonna su cui deve essere eseguita l'espressione regolare.
  • "REGEXP 'pattern'" REGEXP è l'operatore di espressione regolare e 'pattern' rappresenta il modello a cui deve corrispondere REGEXP. RLIKE è il sinonimo di REGEXP e ottiene gli stessi risultati di REGEXP. Per evitare di confonderlo con l'operatore LIKE, è preferibile utilizzare invece REGEXP .

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é è contenuto nel titolo, verrà considerato.

Supponiamo di voler cercare film che iniziano con a, b, cod, seguiti da un numero qualsiasi di altri personaggi, come faremmo per ottenerlo. Possiamo usare un'espressione regolare insieme ai metacaratteri per ottenere i risultati desiderati.

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

L'esecuzione dello script precedente nel workbench MySQL su myflixdb ci dà 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 uno sguardo più da vicino alla nostra espressione regolare responsabile del risultato di cui sopra.

'[abcd]' l'accento circonflesso (^) significa che la corrispondenza del modello deve essere applicata all'inizio e la charlist [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 sopra e usiamo la lista di caratteri NOT e vediamo quali risultati otterremo dopo aver eseguito la nostra query.

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

L'esecuzione dello script precedente nel workbench MySQL su myflixdb ci dà 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 uno sguardo 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 la charlist [abcd] significa che i titoli dei film che iniziano con uno dei caratteri racchiusi sono esclusi dal set di risultati.

Metacaratteri delle espressioni regolari

Quello che abbiamo visto nell'esempio sopra è la forma più semplice di un'espressione regolare. Diamo ora un'occhiata alle corrispondenze di pattern di espressioni regolari più avanzate. Supponiamo di voler cercare titoli di film che iniziano con il pattern "codice" usando solo un'espressione regolare, come lo faremmo? La risposta sono i metacaratteri. Ci consentono di mettere a punto i nostri risultati di ricerca di pattern utilizzando espressioni regolari.

Char Descrizione Esempio
* Il metacarattere asterisco (*) viene utilizzato per trovare zero (0) o più istanze delle stringhe che lo precedono SELEZIONA * DA film DOVE titolo REGEXP 'da *'; darà a tutti i film contenenti personaggi "da". Ad esempio, Codice Da Vinci, Le bambine di papà.
+ Il metacarattere più (+) viene utilizzato per trovare una o più istanze di stringhe che lo precedono. SELEZIONA * DA `film` DOVE` titolo` REGEXP 'mon +'; darà tutti i film contenenti personaggi "mon". Ad esempio, Angeli e Demoni.
? Il metacarattere domanda (?) Viene utilizzato per trovare zero (0) o una istanza delle stringhe che lo precedono. SELEZIONA * DA `categories` WHERE` category_name` REGEXP 'com?'; darà tutte le categorie che contengono com di stringa. Ad esempio, commedia, commedia romantica.
. Il metacarattere punto (.) Viene utilizzato per trovare la corrispondenza con ogni singolo carattere ad eccezione di una nuova riga. SELEZIONA * DA film DOVE `year_released` REGEXP '200.'; darà tutti i film usciti negli anni che iniziano con i caratteri "200" seguiti da un singolo carattere. Ad esempio, 2005,2007,2008 ecc.
[abc] La charlist [abc] viene utilizzata per abbinare uno qualsiasi dei caratteri racchiusi. SELEZIONA * DA `movies` WHERE` title` REGEXP '[vwxyz]'; darà tutti i film contenenti un singolo carattere in "vwxyz". Ad esempio, X-Men, Da Vinci Code, ecc.
[abc] La charlist [abc] viene utilizzata per trovare qualsiasi carattere escluso quelli racchiusi. SELEZIONA * DA `movies` WHERE` title` REGEXP '[vwxyz]'; darà tutti i film contenenti personaggi diversi da quelli in "vwxyz".
[AZ] La [AZ] viene utilizzata per abbinare qualsiasi lettera maiuscola. SELEZIONA * DA `membri` WHERE` indirizzo_postale` REGEXP '[AZ]'; darà 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] La [az] viene utilizzata per abbinare qualsiasi lettera minuscola SELEZIONA * DA `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 numero di iscrizione 1.
[0-9] Lo [0-9] viene utilizzato per abbinare qualsiasi cifra da 0 a 9. SELEZIONA * DA `membri` DOVE` contact_number` REGEXP '[0-9]' darà a tutti i membri che hanno inviato numeri di contatto contenenti caratteri "[0-9]". Ad esempio, Robert Phil.
^ L' accento circonflesso (^) viene utilizzato per avviare la partita dall'inizio. SELEZIONA * DA `movies` WHERE` title` REGEXP '[cd]'; fornisce tutti i film con il titolo che iniziano con uno qualsiasi dei personaggi in "cd". Ad esempio, nome in codice Black, Daddy's Little Girls e Da Vinci Code.
| La barra verticale (|) viene utilizzata per isolare le alternative. SELEZIONA * DA `film` WHERE` title` REGEXP '[cd] | [u]'; fornisce tutti i film con il titolo che iniziano con uno qualsiasi dei personaggi in "cd" o "u". Ad esempio, nome in codice Black, Daddy's Little Girl, Da Vinci Code e Underworld - Awakening.
[[: <:]] Il [[: <:]] corrisponde all'inizio delle parole. SELEZIONA * DA `movies` WHERE` title` REGEXP '[[: <:]] per'; fornisce tutti i film con titoli che iniziano con i personaggi. Ad esempio: dimenticare Sarah Marshal.
[[:>:]] Il [[:>:]] corrisponde alla fine delle parole. SELEZIONA * DA `movies` WHERE` title` REGEXP 'ack [[:>:]]'; fornisce tutti i film con titoli che terminano con i caratteri "ack". Ad esempio, nome in codice nero.
[:classe:] Il [: classe:] corrisponde a una classe di caratteri vale a dire [: alpha:] per abbinare le lettere, [: space:] per abbinare lo spazio bianco, [: punct:] sia punteggiature partita e [: upper:] per le lettere di classe superiore. SELEZIONA * DA `movies` WHERE` title` REGEXP '[: alpha:]'; fornisce a tutti i film con titoli che contengono solo lettere. Ad esempio, Forgetting Sarah Marshal, X-Men ecc. Film come Pirati dei Caraibi 4 verranno omessi da questa query.

La barra rovesciata (\) viene utilizzata come carattere di escape. Se vogliamo usarlo come parte del pattern in un'espressione regolare, dovremmo usare i doppi backslash (\\)

Sommario

  • Le espressioni regolari forniscono una corrispondenza di pattern potente e flessibile che può aiutarci a implementare utilità di ricerca avanzata 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 un numero di metacaratteri che consentono maggiore flessibilità e controllo durante l'esecuzione di corrispondenze di pattern.
  • La barra rovesciata viene utilizzata come carattere di escape nelle espressioni regolari. Viene considerato nella corrispondenza del pattern solo se sono stati utilizzati doppi backslash.
  • Le espressioni regolari non fanno distinzione tra maiuscole e minuscole.