Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: SQL Server 2025 (17.x)
Database SQL di Azure
Istanza gestita di SQL di Azure
database SQL in Microsoft Fabric
Questo articolo presenta le espressioni regolari per SQL Server.
Un'espressione regolare, o regex, è una sequenza di caratteri che definisce un criterio di ricerca per il testo. Regex viene comunemente usato per un'ampia gamma di attività, tra cui criteri di ricerca, convalida dei dati, trasformazione dei dati ed esecuzione di query. Offre un modo flessibile ed efficiente per cercare, modificare e gestire operazioni di dati complesse.
Note
Le espressioni regolari sono disponibili in Istanza gestita di SQL di Azure con i criteri di aggiornamentodi SQL Server 2025 o Always-up-to-date.
Questa implementazione dell'espressione regolare è basata sulla libreria di espressioni regolari RE2. Per altre informazioni, vedere sintassi delle espressioni regolari RE2.
Funzioni regex supportate:
| Function | Description |
|---|---|
| REGEXP_LIKE | Restituisce un valore booleano che indica se l'input di testo corrisponde al modello regex. |
| REGEXP_REPLACE | Restituisce una stringa di origine modificata sostituita da una stringa di sostituzione, in cui è stata trovata l'occorrenza del criterio regex. |
| REGEXP_SUBSTR | Estrae parti di una stringa in base a un criterio di espressione regolare. Restituisce Nth occorrenza di una sottostringa che corrisponde al modello regex. |
| REGEXP_INSTR | Restituisce la posizione iniziale o finale della sottostringa corrispondente, a seconda dell'opzione specificata. |
| REGEXP_COUNT | Restituisce un conteggio del numero di volte in cui si verifica un criterio regex in una stringa. |
| REGEXP_MATCHES | Restituisce una tabella di sottostringhe acquisite che corrispondono a un criterio di espressione regolare a una stringa. Se non viene trovata alcuna corrispondenza, la funzione non restituisce alcuna riga. |
| REGEXP_SPLIT_TO_TABLE | Restituisce una tabella di stringhe suddivise, delimitate dal modello regex. Se non esiste alcuna corrispondenza con il criterio, la funzione restituisce la stringa. |
Le espressioni regolari possono essere composte da caratteri letterali e metacharacter, che hanno significati e funzioni speciali.
Un'espressione regolare di base è un singolo carattere letterale. I caratteri corrispondono a se stessi, ad eccezione dei metacharacter. I metacharacter includono *, +?, (, , )o |. Per trovare una corrispondenza con un metacaracter, eseguirne l'escape con una barra rovesciata. Ad esempio, \* corrisponde al carattere asterisco letterale (*).
È possibile modificare o concatenare due espressioni regolari per formare una nuova espressione regolare: se e1 corrisponde a se2 corrisponde a t, e1 | e2 corrisponde a s o te1e2 corrisponde a st.
I metacharacters *, +e ? sono operatori di ripetizione: e1* corrisponde a una sequenza di zero o più stringhe (possibilmente diverse), ognuna delle quali corrisponde a e1; e1 + corrisponde a una o più stringhe; e1? corrisponde a zero o uno.
La precedenza dell'operatore, dal binding più debole a quello più sicuro, è la seguente: - Alternanza - Concatenazione - Operatori di ripetizione
Le parentesi esplicite possono essere usate per forzare significati diversi, come nelle espressioni aritmetiche. Alcuni esempi: ab|cd equivale a ; (ab)|(cd) equivale a aba(b).
Per altre informazioni sulla sintassi dell'espressione regolare accettata da RE2, vedere
Sintassi delle espressioni regolari RE2. Questa pagina elenca anche alcune sintassi accettate da PCRE, Perl e Vim.
Caratteri di espressione regolare accettati
Espressioni con caratteri singoli
| Tipi di espressioni a caratteri singoli | Examples |
|---|---|
| qualsiasi carattere, eventualmente includendo newline (s=true) | . |
| character class | [xyz] |
| classe di carattere negativa | [^xyz] |
| Classi di caratteri perl | \d |
| classe di carattere di Perl negati | \D |
| Classi di caratteri ASCII | [[:alpha:]] |
| classe di carattere ASCII negati | [[:^alpha:]] |
| classe di caratteri Unicode (nome di una lettera) | \pN |
| classe di carattere Unicode negati | \p{Greek} |
| classe di caratteri Unicode negati (nome di una lettera) | \PN |
| classe di caratteri Unicode negati | \P{Greek} |
| Compositi | Description |
|---|---|
xy |
x seguito da y |
x | y |
x o y (preferisce x) |
| Ripetizioni | Description |
|---|---|
x* |
zero o più x, preferire più |
x+ |
uno o più x, preferisce di più |
x? |
zero o una x, preferisce una |
x{n,m} |
n o n+1 o ... o m x, preferisce di più |
x{n,} |
n o più x, preferisce di più |
x{n} |
esattamente n x |
x*? |
zero o più x, preferire meno |
x+? |
uno o più x, preferisce meno |
x?? |
zero o una x, preferire zero |
x{n,m}? |
n o n+1 o ... o m x, preferisce meno |
x{n,}? |
n o più x, preferisce meno |
x{n}? |
esattamente n x |
Note
I moduli x{n,m}di conteggio , x{n,}e x{n} rifiutano i moduli che creano un numero minimo o massimo di ripetizioni superiore a 1.000. Le ripetizioni illimitate non sono soggette a questa restrizione.
Classi di caratteri perl
Nella tabella seguente sono elencate le classi di caratteri Perl attualmente supportate.
| Classi di caratteri di Perl (tutti solo ASCII) | Description |
|---|---|
\d |
cifre ( [0-9]) |
\D |
non cifre ([^0-9]) |
\s |
spazio bianco ( [\t\n\f\r ]) |
\S |
non spazio bianco ( [^\t\n\f\r ]) |
\w |
caratteri parola ( [0-9A-Za-z_]) |
\W |
non caratteri alfanumerici ( [^0-9A-Za-z_]) |
Classe di caratteri di ASCII
Nella tabella seguente sono elencate le classi di caratteri ASCII attualmente supportate.
| Classe di caratteri di ASCII | Description |
|---|---|
[[:alnum:]] |
alfanumerico ( [0-9A-Za-z]) |
[[:alpha:]] |
alfabetico ( [A-Za-z]) |
[[:ascii:]] |
ASCII ( [\x00-\x7F]) |
[[:blank:]] |
blank ( [\t ]) |
[[:cntrl:]] |
controllo ( [\x00-\x1F\x7F]) |
[[:digit:]] |
cifre ( [0-9]) |
[[:graph:]] |
grafico ( [!-~] o [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]) |
[[:lower:]] |
minuscolo ( [a-z]) |
[[:print:]] |
stampabile ( [ -~] o [ [:graph:]]) |
[[:punct:]] |
punteggiatura ( [!-/:-@[-\``{-~]) |
[[:space:]] |
spazio bianco ( [\t\n\v\f\r ]) |
[[:upper:]] |
maiuscole ( [A-Z]) |
[[:word:]] |
caratteri parola ( [0-9A-Za-z_]) |
[[:xdigit:]] |
cifra esadecimale ([0-9A-Fa-f]) |
Caratteri letterali
- Letters
- Numbers
- Symbols
Stringhe vuote
| Stringhe vuote | Description |
|---|---|
^ |
All'inizio del testo o della riga (m=true) |
$ |
Alla fine del testo (ad esempio \z, non \Z) o riga (m=true) |
\A |
All'inizio del testo |
\b |
In corrispondenza del limite della parola ASCII (\w su un lato e \W, \Ao \z sull'altro) |
\B |
Non al limite delle parole ASCII |
\z |
Alla fine del testo |
Groupings
Gruppo di acquisizione (sottoespressione) del modello con:
| Grouping | Description |
|---|---|
(re) |
Gruppo di acquisizione numerato (sottomatch) |
(?P<name>re) |
Gruppo di acquisizione denominato e numerato (sottomatch) |
(?:re) |
Gruppo non di acquisizione |
(?<flags>) |
Impostare <flags> all'interno del gruppo corrente; non di acquisizione |
(?<flags>:re) |
Impostare <flags> durante l'acquisizione redel raggruppamento |
Flags
Usare i flag per modificare il comportamento dell'espressione. Per esempio:
| Flag | Description |
|---|---|
i |
Senza distinzione tra maiuscole e minuscole (impostazione predefinita false) |
m |
Modalità a più righe: ^ e $ corrispondenza della riga iniziale/finale oltre al testo di inizio/fine (impostazione predefinita false) |
s |
Let . match \n (impostazione predefinita false) |
c |
Distinzione tra maiuscole e minuscole (impostazione predefinita true) |
Questa implementazione supporta lo standard POSIX delle espressioni regolari che seguono RE2 e supporta il gusto PCRE/PCRE2 della sintassi delle espressioni regolari, compatibile con i motori e gli strumenti di espressioni regolari più moderni. Esistono diversi tipi di espressioni regolari, ad esempio POSIX, ANSI, Perl e PCRE, con sintassi e funzionalità diverse. Per altre informazioni sui costrutti supportati e sul comportamento del motore regex sottostante, vedere RE2, una libreria di espressioni regolari.
Note
La corrispondenza delle espressioni regolari in SQL Server non rispetta le regole di confronto SQL per i confronti linguistici. Questo comportamento è progettato e coerente con la maggior parte dei motori di espressioni regolari, poiché la corrispondenza si basa sulle proprietà del criterio e dei caratteri Unicode anziché sulle regole di confronto. Di conseguenza, può causare differenze di comportamento rispetto ad altre funzioni di confronto di stringhe come LIKE, in particolare sulle colonne indicizzate con regole di confronto specifiche del linguaggio.
Requirements
- Uno strumento client SQL, ad esempio Azure Data Studio, SQL Server Management Studio o Visual Studio Code.
- Conoscenza di base della sintassi e delle query SQL.
- Conoscenza di base della sintassi e dei concetti relativi alle espressioni regolari.
FAQ
Qual è l'impatto sulle prestazioni dell'uso delle regex?
Le query regex possono avere un impatto sulle prestazioni a seconda della complessità del modello regex, delle dimensioni dei dati di testo e del numero di righe coinvolte. È possibile usare il piano di esecuzione e le statistiche per monitorare e ottimizzare le prestazioni delle query regex.
Limitazioni
Gli elementi seguenti non sono attualmente supportati:
- I tipi di dati LOB (varchar(max) o nvarchar(max)) per
string_expressionssono supportati nelle funzioni intrinseche seguenti:REGEXP_LIKEREGEXP_COUNTREGEXP_INSTR
Tuttavia, questo supporto è limitato alle dimensioni di input fino a 2 MB.
I tipi di dati LOB non sono supportati nelle funzioni regex seguenti:
REGEXP_REPLACEREGEXP_SUBSTRREGEXP_MATCHESREGEXP_SPLIT_TO_TABLE
Le funzioni di espressione regolare non sono supportate nelle stored procedure compilate in modo nativo.