In MariaDB, il REGEXP_SUBSTR()
funzione restituisce la sottostringa che corrisponde al modello di espressione regolare specificato.
Se non c'è corrispondenza (cioè la stringa di input non contiene la sottostringa), il risultato è una stringa vuota.
Sintassi
La sintassi è questa:
REGEXP_SUBSTR(subject,pattern)
Dove subject
è la stringa di input e il pattern
è il modello di espressione regolare per la sottostringa.
Nota che, al momento della scrittura, la versione di MariaDB di REGEXP_SUBSTR()
accetta meno argomenti rispetto a REGEXP_SUBSTR()
di MySQL . La versione di MySQL consente di fornire argomenti per la posizione iniziale della ricerca, quale occorrenza cercare, nonché un modo per perfezionare l'espressione regolare.
Esempio
Ecco un esempio di base:
SELECT REGEXP_SUBSTR('Thailand and Laos', 'l.nd');
Risultato:
+--------------------------------------------+ | REGEXP_SUBSTR('Thailand and Laos', 'l.nd') | +--------------------------------------------+ | land | +--------------------------------------------+
In questo caso c'è una corrispondenza e viene restituita la sottostringa.
Partite multiple
Per impostazione predefinita, se sono presenti più corrispondenze all'interno della stringa, viene restituita la prima:
SELECT REGEXP_SUBSTR('Lend for land', 'l.nd');
Risultato:
+----------------------------------------+ | REGEXP_SUBSTR('Lend for land', 'l.nd') | +----------------------------------------+ | Lend | +----------------------------------------+
Nessuna corrispondenza
Ecco un esempio in cui non c'è corrispondenza:
SELECT REGEXP_SUBSTR('Lend for land', '^C');
Risultato:
+--------------------------------------+ | REGEXP_SUBSTR('Lend for land', '^C') | +--------------------------------------+ | | +--------------------------------------+
Non c'è corrispondenza, quindi il risultato è una stringa vuota.
Maiuscole/minuscole
Il REGEXP_SUBSTR()
segue le regole di distinzione tra maiuscole e minuscole delle regole di confronto effettive. La corrispondenza viene eseguita senza distinzione tra maiuscole e minuscole per le regole di confronto senza distinzione tra maiuscole e minuscole e con distinzione tra maiuscole e minuscole per le regole di confronto con distinzione tra maiuscole e minuscole e per i dati binari.
Ecco un esempio:
SELECT
REGEXP_SUBSTR('My Cats', 'c.t') AS "My Default",
REGEXP_SUBSTR(_latin7'My Cats' COLLATE latin7_general_ci, 'c.t') AS "Case Insensitive",
REGEXP_SUBSTR(_latin7'My Cats' COLLATE latin7_general_cs, 'c.t') AS "Case Sensitive";
Risultato:
+------------+------------------+----------------+ | My Default | Case Insensitive | Case Sensitive | +------------+------------------+----------------+ | Cat | Cat | | +------------+------------------+----------------+
Le mie regole di confronto predefinite non fanno distinzione tra maiuscole e minuscole. Le altre due stringhe sono state forzate rispettivamente a un confronto senza distinzione tra maiuscole e minuscole e con distinzione tra maiuscole e minuscole.
Fornire un BINARY
anche la stringa fa distinzione tra maiuscole e minuscole (vedi sotto).
Stringhe binarie
Passaggio di un BINARY
string influisce anche sulla distinzione tra maiuscole e minuscole. Con BINARY
stringhe, un carattere maiuscolo è diverso dalla sua controparte minuscola:
Esempio:
SELECT
REGEXP_SUBSTR('My Cats', 'c.t') AS "Character",
REGEXP_SUBSTR(BINARY 'My Cats', 'c.t') AS "Binary";
Risultato:
+-----------+--------+ | Character | Binary | +-----------+--------+ | Cat | | +-----------+--------+
Ecco cosa succede se cambiamo caso:
SELECT
REGEXP_SUBSTR('My Cats', 'C.t') AS "Character",
REGEXP_SUBSTR(BINARY 'My Cats', 'C.t') AS "Binary";
Risultato:
+-----------+--------+ | Character | Binary | +-----------+--------+ | Cat | Cat | +-----------+--------+
Argomenti nulli
Passaggio null
poiché qualsiasi argomento risulta in null
:
SELECT
REGEXP_SUBSTR(null, 'c.t') AS "1",
REGEXP_SUBSTR('Cat', null) AS "2",
REGEXP_SUBSTR(null, null) AS "3";
Risultato:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Numero di argomenti errato
Il passaggio di un numero errato di argomenti o di nessun argomento genera un errore:
SELECT REGEXP_SUBSTR('Cat');
Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_SUBSTR'