- Le espressioni regolari: ricerche, rimpiazzamenti e opzioni -
 
COSA SERVE PER QUESTO TUTORIAL
Download | Chiedi sul FORUM | Glossario cognizioni basiche di un qualsiasi linguaggio .Net
Come servirsi delle espressioni regolari in VB.Net

ALCUNI ESEMPI PRATICI
Verificare una o più corrispondenze ed effettuare sostituzioni.

Effettuare il parsing di stringhe è da sempre un'attività complicata e noiosa. Tuttavia grazie alle espressioni regolari, in .Net, questa operazione è resa più agile, vediamo come sono usarle e configurarle.
Tutto ciò che riguarda le espressioni regolari (anche note come regular expressions, RegEx o RegExp) si trova all'interno del namespace System.Text.RegularExpressions, in particolare nella classe RegEx. L'esempio più semplice consiste nel verificare semplicemente se una certa stringa corrisponde (ovvero ha almeno un match) alla regular expression in questione. Per fare ciò ci serviamo della proprietà Match.Success, dove Match è inteso come il singolo risultato di una ricerca:


Dim content As String = "Testo di Esempio"

If Regex.Match(content, "[aeiou]").Success Then
    Console.WriteLine("Contiene una vocale!")
End If

In alternativa si può cercare tutte le occorrenze corrispondenti alla RegEx, utilizzando in questo caso il metodo RegEx.Matches, che restituisce una collezione di Match:


Dim vocali As MatchCollection = Regex.Matches(content, "[aeiou]")
If vocali.Count = 0 Then
    Console.WriteLine("Non contiene vocali!")
Else
    Console.Write("Contiene vocali nelle posizioni: ")
    For Each vocale As Match In vocali
        Console.Write(vocale.Index & " ")
    Next
    Console.WriteLine()
End If

Vediamo anche che tramite la proprietà Match.Index possiamo ottenere la posizione dove comincia la corrispondenza.
Con le RegEx è anche possibile effettuare dei rimpiazzamenti:


Dim newContent As String
newContent = Regex.Replace(content, "[aeiou]", "%VOCALE%")
Console.WriteLine("Rimpiazziamo le vocali: " & newContent)

Anche facendo riferimento ai gruppi identificati nell'espressione regolare di ricerca (tra parentesi), tramite il simbolo del dollaro seguito dall'indice del gruppo:


newContent = Regex.Replace(content, "([aeiou])", "$1$1")
Console.WriteLine("Raddoppiamo le vocali: " & newContent)

Infine ad un gruppo identificato può anche essere associato un nome, sempre richiamabile dall'espressione con cui rimpiazzare:


newContent = Regex.Replace(content, "(?<vocale>[aeiou])", "(${vocale})")
Console.WriteLine("Parentesizziamo le vocali: " & newContent)

OPZIONI PER LE REGULAR EXPRESSION
Personalizzare il comportamento delle espressioni regolari.

Le regular expression hanno varie implementazioni e possono essere configurate, pertanto vediamo il significato di alcuni flag (membri di System.Text.RegularExpressions.RegexOptions) che è possibile specificare quando si instanzia un oggetto di tipo RegEx o passandolo come parametro a Match, Matches o Replace:

  • Compiled: l'espressione regolare verrà compilata migliorando drasticamente le performance di esecuzione ma incrementando leggermente i tempi di avvio;
  • IgnoreCase: effettua ricerca non case-sensitive (nessuna distinzione tra maiuscole e minuscole);
  • MultiLine: modifica il significato dei simboli ^ e $ in modo che corrispondano all'inizio e fine di ciascuna riga invece che all'inizio e alla fine di ciascuna riga;
  • SingleLine: estende il significato del simbolo di match-all (il punto) includendo anche \n, ovvero i ritorni a capo;
  • ECMAScript: compatibile con le regex di JavaScript, equivale a IgnoreCase, MultiLine e Compiled;

Nota: se si usa di frequente una serie di espressioni regolari in forma compilata può essere utile compilarle una volta soltanto e salvarle in un assembly tramite il metodo RegEx.CompileToAssembly.

 

<< INDIETRO by VeNoM00