Condividi tramite


Usare espressioni regolari in Visual Studio

Visual Studio usa espressioni regolari .NET per trovare e sostituire il testo.

Sintassi delle espressioni regolari

La tabella seguente contiene alcuni caratteri di espressione regolare, operatori, costrutti ed esempi di criteri. Per informazioni di riferimento più complete, vedere linguaggio delle espressioni regolari.

Scopo Espressione Esempio
Corrispondi a qualsiasi carattere singolo (eccetto un'interruzione di riga). Per altre informazioni, vedere Qualsiasi carattere. . a.o corrisponde a "aro" in "around" e a "abo" in "about" ma non a "acro" in "across"
Individua zero o più occorrenze dell'espressione precedente (corrisponde al maggior numero possibile di caratteri). Per altre informazioni, vedere Corrisponde zero o più volte. * a*r corrisponde a "r" in "rack", "ar" in "ark" e "aar" in "aardvark"
Abbina qualsiasi carattere zero o più volte. .* c.*e corrisponde a "cke" in "racket", "comme" in "comment" e "code" in "code"
Trova la corrispondenza di una o più occorrenze dell'espressione precedente (cerca di ottenere il maggior numero possibile di caratteri). Per ulteriori informazioni, vedere Corrispondere una o più volte. + e+d corrisponde a "eed" in "feeder" e "ed" in "faded"
Trova la corrispondenza con uno o più caratteri. .+ e.+e corrisponde a "eede" in "feeder", ma non trova corrispondenze nel "feed"
Abbina zero o più occorrenze dell'espressione precedente (con quante meno caratteri possibile). Per altre informazioni, vedere Trova la corrispondenza zero o più volte (ricerca pigra). *? \w*?d corrisponde a "fad" e "ed" in "faded" ma non all'intera parola "faded" a causa della corrispondenza pigra
Trova la corrispondenza con una o più occorrenze dell'espressione precedente (trova la corrispondenza con il minor numero possibile di caratteri). Per altre informazioni, vedere Trovare una o più volte (corrispondenza differita). +? e\w+? corrisponde a "ee" in "addormentato" e "ed" in "sbiadito" ma non trova corrispondenze in "svanire"
Fissare la stringa da confrontare all'inizio di una riga o di una stringa ^ ^car corrisponde alla parola "car" solo quando viene visualizzata all'inizio di una riga
Ancorare la stringa di corrispondenza alla fine di una riga \r?$ car\r?$ corrisponde a "car" solo quando viene visualizzato alla fine di una linea
Ancorare la stringa di corrispondenza alla fine del file $ car$ corrisponde a "car" solo quando viene visualizzato alla fine del file
Trova la corrispondenza di un singolo carattere in un set [abc] b[abc] corrisponde a "ba", "bb" e "bc"
Trova la corrispondenza con qualsiasi carattere in un intervallo di caratteri [a-f] be[n-t] corrisponde a "bet" in "between", "ben" in "beneath" e "bes" in "accanto a", ma non trova corrispondenze in "below".
Acquisire e numerare in modo implicito l'espressione contenuta tra parentesi () ([a-z])X\1 corrisponde a "aXa" e "bXb", ma non a "aXb". "\1" fa riferimento al primo gruppo di espressioni "[a-z]". Per altre informazioni, vedere Gruppi di acquisizione e modelli di sostituzione.
Annullare una partita (?! abc) real(?!ity) corrisponde a "real" in "realty" e "realmente" ma non in "realtà". Trova anche il secondo "reale" (ma non il primo "reale") in "realityreal".
Trova la corrispondenza con qualsiasi carattere che non si trova in un determinato set di caratteri. Per altre informazioni, vedere Gruppo di caratteri negativi. [^abc] be[^n-t] corrisponde a "bef" in "before", "beh" in "behind" e "bel" in "below", ma non trova corrispondenze in "sotto"
Trova la corrispondenza tra l'espressione prima o quella dopo il simbolo | (sponge|mud) bath corrisponde a "bagno di spugna" e "bagno di fango"
Esegui l'escape del carattere dopo la barra rovesciata \ \^ corrisponde al carattere ^
Specificare il numero di occorrenze dei caratteri o dei gruppi precedenti. Per altre informazioni, vedere Corrisponde esattamente n volte. {n}, dove 'n' è il numero di occorrenze x(ab){2}x corrisponde a "xababx"
x(ab){2,3}x corrisponde a "xababx" e "xabababx", ma non a "xababababx"
Testo corrispondente a una categoria Unicode. Per ulteriori informazioni sulle classi di caratteri Unicode, vedere Proprietà dei caratteri dello Standard Unicode 15.0. \p{X}, dove "X" è il numero Unicode. \p{Lu} corrisponde a "T" e "D" in "Thomas Doe"
Riconoscere un limite di parole \b (All'esterno di una classe di caratteri \b specifica un limite di parola e all'interno di una classe di caratteri \b specifica un backspace.) \bin corrisponde a "in" in "inside" ma non trova corrispondenze in "pinto"
Riscontra un'interruzione di riga (cioè un ritorno a capo seguito da una nuova riga, oppure solo una nuova riga) \r?\n End\r?\nBegin corrisponde a "End" e "Begin" solo quando "End" è l'ultima stringa in una riga e "Begin" è la prima stringa nella riga successiva
Trova la corrispondenza con qualsiasi carattere di parola \w a\wd corrisponde a "add" e "a1d" ma non a "a d"
Corrispondenza con qualsiasi carattere di spazi vuoti \s Public\sInterface corrisponde alla frase "Interfaccia pubblica"
Rispondi a qualsiasi carattere di cifra decimale \d \d corrisponde a "4" e "0" in "wd40"

Un'espressione regolare di esempio che combina alcuni operatori e costrutti per trovare la corrispondenza con un numero esadecimale è \b0[xX]([0-9a-fA-F]+)\b. Questa espressione corrisponde a "0xc67f" ma non a "0xc67g".

Suggerimento

Nei sistemi operativi Windows la maggior parte delle righe termina in "\r\n" (ritorno a capo seguito da una nuova riga). Questi caratteri non sono visibili ma sono presenti nell'editor e passati al servizio espressioni regolari .NET. Quando si gestiscono i file dal Web o da un sistema operativo non Windows, assicurarsi di tenere conto della possibilità che usino una nuova riga solo per un'interruzione di riga.

Gruppi di cattura e modelli di sostituzione

Un gruppo capture delinea una sottoespressione di un'espressione regolare e acquisisce una sottostringa di una stringa di input. È possibile usare i gruppi acquisiti all'interno dell'espressione regolare stessa (ad esempio, per cercare una parola ripetuta) o in un modello di sostituzione. Per informazioni dettagliate, consultare i costrutti di raggruppamento nelle espressioni regolari e.

Per creare un gruppo di cattura numerato, racchiudere la sottoespressione tra parentesi nel modello di espressione regolare. Le acquisizioni vengono numerate automaticamente da sinistra a destra in base alla posizione delle parentesi di apertura nell'espressione regolare. Per accedere al gruppo acquisito, considerare gli esempi seguenti:

  • All'interno dell'espressione regolare: usare \number. Ad esempio, \1 nell'espressione regolare (\w+)\s\1 fa riferimento al primo gruppo di acquisizione (\w+).

  • In un modello di sostituzione: usare $number. Ad esempio, l'espressione regolare raggruppata (\d)([a-z]) definisce due gruppi: il primo gruppo contiene una singola cifra decimale e il secondo gruppo contiene un singolo carattere tra un e z. L'espressione trova quattro corrispondenze nella stringa seguente: 1a 2b 3c 4d. La stringa di sostituzione z$1 fa riferimento al primo gruppo solo ($1) e converte la stringa in z1 z2 z3 z4.

L'immagine seguente mostra un'espressione regolare (\w+)\s\1 e una stringa di sostituzione $1. Sia l'espressione regolare che il modello di sostituzione fanno riferimento al primo gruppo di cattura numerato automaticamente 1. Quando si sceglie Sostituisci tutte le nella finestra di dialogo sostituzione rapida in Visual Studio, le parole ripetute vengono rimosse dal testo.

Screenshot di Sostituisci rapidamente che mostra un gruppo di acquisizione numerato in Visual Studio.

Suggerimento

Nella finestra di dialogo sostituzione rapida assicurarsi di selezionare il pulsante Usa espressioni regolari oppure premere ALT+E.

Gruppi di acquisizione denominati

Anziché basarsi sulla numerazione automatica di un gruppo di acquisizione, è possibile assegnargli un nome. La sintassi per un gruppo di acquisizione denominato è (?<name>subexpression).

I gruppi di acquisizione denominati, come i gruppi di acquisizione numerati, possono essere usati all'interno dell'espressione regolare stessa o in un modello di sostituzione. Per accedere al gruppo di cattura denominato, considerare i seguenti esempi:

  • All'interno dell'espressione regolare: usare \k<name>. Ad esempio, \k<repeated> nell'espressione regolare (?<repeated>\w+)\s\k<repeated> fa riferimento al gruppo di acquisizione denominato repeated e la cui sottoespressione è \w+.

  • In un modello di sostituzione: usare ${name}. Ad esempio, ${repeated}.

L'immagine seguente mostra un'espressione regolare (?<repeated>\w+)\s\k<repeated> e una stringa di sostituzione ${repeated}. Sia l'espressione regolare che il modello di sostituzione fanno riferimento al gruppo di acquisizione denominato repeated. Quando si sceglie Sostituisci tutte le nella finestra di dialogo sostituzione rapida in Visual Studio, le parole ripetute vengono rimosse dal testo.

Screenshot del Quick Replace che mostra un gruppo di acquisizione denominato in Visual Studio.

Suggerimento

Assicurarsi di selezionare il pulsante "Usa espressioni regolari" (o premere ALT+E) nella finestra di dialogo Sostituzione Rapida.

Per altre informazioni sui gruppi di acquisizione denominati, vedere sottoespressioni con corrispondenza denominata. Per altre informazioni sulle espressioni regolari usate nei modelli di sostituzione, vedere Sostituzioni nelle espressioni regolari.

Esempi

Modello Descrizione
int ([_A-Za-z][_A-Za-z0-9]*) Trova la corrispondenza con definizioni di numeri interi singoli. Gli identificatori iniziano con una lettera maiuscola o minuscola, seguita da zero o più (indicate da *) lettere o numeri. L'identificatore è catturato come $1 dalle parentesi esterne.
(private|internal|public)*\s*([\w]+\s+)int\s+([_A-Za-z][_A-Za-z0-9]*)\s+=\s+[+-]+(\d)+ Trova la corrispondenza con le dichiarazioni integer C# inizializzate in valori letterali interi, acquisendo le varie parti, tra cui il livello di accesso, i modificatori come const o static, l'identificatore e il valore definito. Si noti l'uso di \s+ per almeno un carattere di spazio vuoto o \s* se potrebbe verificarsi uno spazio vuoto o meno.
foreach\s*\(([\w\d]*)\s+([\w\d]*)\s+in\s+(.*)\) Trova la corrispondenza con la riga di apertura di un ciclo foreach. Le parentesi letterali sono precedute da un carattere di escape, il backslash (\). I vari gruppi vengono acquisiti come $1, $2e $3 dalle parentesi non escape.
#define\s+([_A-Za-z][_A-Za-z0-9]*) Corrisponde a definizioni #define, escludendo il valore, se presente. Il token definito viene archiviato in $1.
#include\s+["<](.*)[">] Includi i file in un file di origine C++.