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

Come funziona la funzione REGEX_REPLACE() in MySQL

In MySQL, il REGEXP_REPLACE() La funzione sostituisce le occorrenze della sottostringa all'interno di una stringa che corrisponde al modello di espressione regolare specificato.

L'intera stringa viene restituita insieme alle sostituzioni.

Se non c'è corrispondenza (cioè la stringa di input non contiene la sottostringa), l'intera stringa viene restituita invariata.

Sintassi

La sintassi è questa:

REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]])

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

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 omesso, tutte le occorrenze vengono sostituite.

Il match_type facoltativo argomento è una stringa che specifica come eseguire la corrispondenza. Ciò 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:

SET @str = 'It was good';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'good', 'great!') 'Result';

Risultato:

+-----------------+---------------+
| Original String | Result        |
+-----------------+---------------+
| It was good     | It was great! |
+-----------------+---------------+

In questo caso c'è una corrispondenza e la stringa viene restituita con la modifica.

Esempio 2 – Corrispondenze multiple

Per impostazione predefinita, se sono presenti più corrispondenze all'interno della stringa, tutte vengono sostituite:

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cat', 'Tiger') 'Result';

Risultato:

+---------------------+---------------------------+
| Original String     | Result                    |
+---------------------+---------------------------+
| Cat Dog Cat Dog Cat | Tiger Dog Tiger Dog Tiger |
+---------------------+---------------------------+

Tuttavia, hai anche la possibilità di specificare quale occorrenza desideri sostituire (ne parleremo più avanti).

Esempio 3 – Nessuna corrispondenza

Ecco un esempio in cui non c'è corrispondenza:

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cow', 'Tiger') 'Result';

Risultato:

+---------------------+---------------------+
| Original String     | Result              |
+---------------------+---------------------+
| Cat Dog Cat Dog Cat | Cat Dog Cat Dog Cat |
+---------------------+---------------------+

Non c'è corrispondenza, quindi la stringa viene restituita invariata.

Esempio 4 – Il pos Argomento

Ecco un esempio per specificare la posizione iniziale:

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cat', 'Tiger', 2) 'Result';

Risultato:

+---------------------+-------------------------+
| Original String     | Result                  |
+---------------------+-------------------------+
| Cat Dog Cat Dog Cat | Cat Dog Tiger Dog Tiger |
+---------------------+-------------------------+

Siamo partiti dalla posizione 2, che viene dopo l'inizio della prima occorrenza, quindi l'operazione di sostituzione riguarda solo le occorrenze che seguono la prima.

Esempio 5 – Il occurrence Argomento

Come accennato, per impostazione predefinita, tutte le occorrenze vengono sostituite. Tuttavia, hai anche la possibilità di specificare un'occorrenza specifica da sostituire utilizzando occurrence discussione. Ecco un esempio:

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cat', 'Tiger', 1, 2) 'Result';

Risultato:

+---------------------+-----------------------+
| Original String     | Result                |
+---------------------+-----------------------+
| Cat Dog Cat Dog Cat | Cat Dog Tiger Dog Cat |
+---------------------+-----------------------+

In questo caso partiamo dalla posizione 1. Tuttavia, se partiamo da una posizione diversa, il risultato è diverso:

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cat', 'Tiger', 2, 2) 'Result';

Risultato:

+---------------------+-----------------------+
| Original String     | Result                |
+---------------------+-----------------------+
| Cat Dog Cat Dog Cat | Cat Dog Cat Dog Tiger |
+---------------------+-----------------------+

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.

Il valore predefinito per l'argomento occorrenza è 0 , il che significa che tutte le occorrenze vengono sostituite. In altre parole, se ometti questo argomento, tutte le occorrenze vengono sostituite (come abbiamo visto negli esempi precedenti). Ecco un esempio di specificazione esplicita di tutte le occorrenze:

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cat', 'Tiger', 1, 0) 'Result';

Risultato:

+---------------------+---------------------------+
| Original String     | Result                    |
+---------------------+---------------------------+
| Cat Dog Cat Dog Cat | Tiger Dog Tiger Dog Tiger |
+---------------------+---------------------------+

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:

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'cat', 'Tiger', 1, 0, 'c') 'Case-Sensitive',
  REGEXP_REPLACE(@str, 'cat', 'Tiger', 1, 0, 'i') 'Case-Insensitive';

Risultato:

+---------------------+---------------------+---------------------------+
| Original String     | Case-Sensitive      | Case-Insensitive          |
+---------------------+---------------------+---------------------------+
| Cat Dog Cat Dog Cat | Cat Dog Cat Dog Cat | Tiger Dog Tiger Dog Tiger |
+---------------------+---------------------+---------------------------+

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 per Unix. Solo il carattere di nuova riga viene riconosciuto come riga che termina con il . , ^ e $ operatori di corrispondenza.