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.