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.