Condividi tramite


Risoluzione dei problemi relativi alle espressioni regolari in Visual Basic

Aggiornamento: novembre 2007

In questo argomento vengono discussi alcuni problemi comuni che possono verificarsi quando si utilizzano le espressioni regolari, vengono forniti suggerimenti per la risoluzione di questi problemi e una procedura per eseguire l'accesso alle stringhe acquisite.

Non corrispondenza del modello stabilito

Di seguito sono elencate le attività più comuni che possono essere eseguite con le espressioni regolari, insieme ai suggerimenti per la risoluzione dei problemi se non si ottengono i risultati previsti:

  • Convalida di stringhe È necessario che un'espressione regolare per la convalida di stringhe inizi con il carattere ^. Utilizzando questo carattere, si fa in modo che inizi la corrispondenza del modulo delle espressioni con un modello specificato all'inizio della stringa. Per ulteriori informazioni, vedere Costruzione di una funzione di convalida in Visual Basic e Asserzioni atomiche a larghezza zero.

  • Corrispondenza con i quantificatori. I quantificatori delle espressioni regolari (*, +, ?, {}) sono generici, il che significa che corrispondono alla stringa più lunga. Tuttavia, per alcuni modelli, può essere opportuno utilizzare la corrispondenza lazy per ottenere la stringa più corta. I quantificatori delle espressioni regolari lazy sono *?, +?, ?? e {}?. Per ulteriori informazioni, vedere Quantificatori.

  • Corrispondenza con i quantificatori nidificati. Quando si utilizzano i quantificatori nidificati, accertarsi che tutti i quantificatori siano di tipo generico o lazy. In caso contrario, i risultati della corrispondenza saranno difficili da prevedere.

Accesso alle stringhe acquisite

Una volta che un'espressione regolare trova le stringhe desiderate, può essere opportuno acquisire tali stringhe e accedere a quelle acquisite. È possibile utilizzare i costrutti di raggruppamento per acquisire le stringhe che corrispondono ai gruppi di sottoespressioni nell'espressione regolare. Per ulteriori informazioni, vedere Costrutti di raggruppamento.

L'accesso alle stringhe acquisite con i gruppi nidificati si articola in diversi passaggi.

Per accedere al testo acquisito

  1. Creare un oggetto Regex per un'espressione regolare.

  2. Chiamare il metodo Match per ottenere l'oggetto Match.

    L'oggetto Match contiene informazioni relative al modo in cui l'espressione regolare corrisponde alla stringa.

  3. Eseguire una reiterazione sugli oggetti Group memorizzati nell'insieme Groups dell'oggetto Match.

    Gli oggetti Group contengono informazioni relative ai risultati di un singolo gruppo di cattura.

  4. Eseguire una reiterazione sugli oggetti Capture memorizzati nell'insieme Captures dell'oggetto Group.

    Ogni oggetto Capture contiene informazioni relative a una singola sottoespressione acquisita, compresa la sottostringa corrispondente e la posizione.

Nel codice seguente ad esempio viene illustrato come accedere alle stringhe acquisite con un'espressione regolare contenente tre gruppi di acquisizione:

    ''' <summary>
    ''' Parses an e-mail address into its parts.
    ''' </summary>
    ''' <param name="emailString">E-mail address to parse.</param>
    ''' <remarks> For example, this method displays the following 
    ''' text when called with "someone@mail.contoso.com":
    ''' User name: someone
    ''' Address part: mail
    ''' Address part: contoso
    ''' Address part: com
    ''' </remarks>
    Sub ParseEmailAddress(ByVal emailString As String)
        Dim emailRegEx As New Regex("(\S+)@([^\.\s]+)(?:\.([^\.\s]+))+")
        Dim m As Match = emailRegEx.Match(emailString)
        If m.Success Then
            Dim output As String = ""
            output &= "User name: " & m.Groups(1).Value & vbCrLf
            For i As Integer = 2 To m.Groups.Count - 1
                Dim g As Group = m.Groups(i)
                For Each c As Capture In g.Captures
                    output &= "Address part: " & c.Value & vbCrLf
                Next
            Next
            MsgBox(output)
        Else
            MsgBox("The e-mail address cannot be parsed.")
        End If
    End Sub

Vedere anche

Attività

Risoluzione dei problemi relativi alle stringhe in Visual Basic

Concetti

Costruzione di una funzione di convalida in Visual Basic