Mysql
 sql >> Database >  >> RDS >> Mysql

Come funziona la funzione REGEXP_SUBSTR() in MySQL

In MySQL, il REGEXP_SUBSTR() funzione restituisce la sottostringa che corrisponde al modello di espressione regolare specificato.

Se non c'è corrispondenza (ovvero la stringa di input non contiene la sottostringa), il risultato è NULL .

Sintassi

La sintassi è questa:

REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]])

Dove expr è la stringa di input e pat è il modello di espressione regolare per la sottostringa.

Il pos facoltativo argomento consente di specificare una posizione all'interno della stringa per avviare la ricerca. Se omesso, inizia dalla posizione 1.

Il occurrence facoltativo argomento consente di specificare quale occorrenza della corrispondenza cercare. Se omessa, viene utilizzata la prima occorrenza (occorrenza 1).

Il match_type facoltativo argomento consente di perfezionare l'espressione regolare. Ad esempio, puoi utilizzare questo argomento per specificare o meno la corrispondenza con distinzione tra maiuscole e minuscole.

Esempio 1 – Utilizzo di base

Ecco un esempio di base:

SELECT REGEXP_SUBSTR('Thailand or Cambodia', 'l.nd') Result;

Risultato:

+--------+
| Result |
+--------+
| land   |
+--------+

In questo caso c'è una corrispondenza e viene restituita la sottostringa.

Esempio 2 – Corrispondenze multiple

Per impostazione predefinita, se sono presenti più corrispondenze all'interno della stringa, viene restituita la prima (sebbene sia possibile specificare un'altra occorrenza se necessario. Ci arriveremo presto):

SELECT REGEXP_SUBSTR('Lend for land', 'l.nd') Result;

Risultato:

+--------+
| Result |
+--------+
| Lend   |
+--------+

Esempio 3 – Nessuna corrispondenza

Ecco un esempio in cui non c'è corrispondenza:

SELECT REGEXP_SUBSTR('Lend for land', '^C') Result;

Risultato:

+--------+
| Result |
+--------+
| NULL   |
+--------+

Non c'è corrispondenza, quindi il risultato è NULL .

Esempio 4 – Il pos Argomento

Ecco un esempio di specifica di una posizione iniziale:

SELECT REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2) Result;

Risultato:

+--------+
| Result |
+--------+
| Cut    |
+--------+

Abbiamo iniziato dalla posizione 2, che viene dopo l'inizio della prima occorrenza, quindi viene restituita l'occorrenza successiva.

Ecco un altro esempio:

SELECT 
  REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1) 'Pos 1',
  REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2) 'Pos 2',
  REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 6) 'Pos 6';

Risultato:

+-------+-------+-------+
| Pos 1 | Pos 2 | Pos 6 |
+-------+-------+-------+
| Cat   | Cut   | Cot   |
+-------+-------+-------+

Esempio 5 – Il occurrence Argomento

Ecco un esempio di utilizzo di occurrence discussione. In tutti i casi, partiamo dalla posizione 1:

SELECT 
  REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1, 1) 'Occurrence 1',
  REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1, 2) 'Occurrence 2',
  REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1, 3) 'Occurrence 3';

Risultato:

+--------------+--------------+--------------+
| Occurrence 1 | Occurrence 2 | Occurrence 3 |
+--------------+--------------+--------------+
| Cat          | Cut          | Cot          |
+--------------+--------------+--------------+

Tuttavia, se partiamo da una posizione diversa, il risultato è diverso:

SELECT 
  REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2, 1) 'Occurrence 1',
  REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2, 2) 'Occurrence 2',
  REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2, 3) 'Occurrence 3';

Risultato:

+--------------+--------------+--------------+
| Occurrence 1 | Occurrence 2 | Occurrence 3 |
+--------------+--------------+--------------+
| Cut          | Cot          | NULL         |
+--------------+--------------+--------------+

Questo è successo perché la nostra posizione di partenza è arrivata dopo che era iniziata la prima occorrenza. Pertanto, l'occorrenza 2 è diventata l'occorrenza 1 e l'occorrenza 3 è diventata l'occorrenza 2. E poiché non c'erano più occorrenze, il risultato dell'occorrenza 3 era NULL (cioè non c'era l'occorrenza 3).

Esempio 6 – Il match_type Argomento

È possibile fornire un argomento aggiuntivo per determinare il tipo di corrispondenza. Ciò ti consente di specificare cose come se la corrispondenza fa distinzione tra maiuscole e minuscole, se includere o meno i terminatori di riga, ecc.

Ecco un esempio di specifica di una corrispondenza con distinzione tra maiuscole e minuscole e una corrispondenza senza distinzione tra maiuscole e minuscole:

SELECT 
  REGEXP_SUBSTR('Cat Cut Cot', 'c.t', 1, 1, 'c') 'Case-Sensitive',
  REGEXP_SUBSTR('Cat Cut Cot', 'c.t', 1, 1, 'i') 'Case-Insensitive';

Risultato:

+----------------+------------------+
| Case-Sensitive | Case-Insensitive |
+----------------+------------------+
| NULL           | Cat              |
+----------------+------------------+

Il match_type argomento può contenere i seguenti caratteri:

c
Corrispondenza con distinzione tra maiuscole e minuscole.
i
Corrispondenza senza distinzione tra maiuscole e minuscole.
m
Modalità a più righe. Riconosci i terminatori di riga all'interno della stringa. Il comportamento predefinito prevede la corrispondenza dei terminatori di riga solo all'inizio e alla fine dell'espressione stringa.
n
Il . il carattere corrisponde ai terminatori di riga. L'impostazione predefinita è . corrispondenza per fermarsi alla fine di una riga.
u
Finiture di riga solo Unix. Solo il carattere di nuova riga viene riconosciuto come riga che termina con il . , ^ e $ operatori di corrispondenza.