Compartilhar via


Solução de Problemas Relativos a Expressões Regulares em Visual Basic

Este tópico aborda alguns problemas comuns que podem ocorrer quando se trabalha com expressões regulares, fornece algumas dicas para solucionar esses problemas e fornece um procedimento para acessar sequências de caracteres capturadas.

Não Correspondência de Padrão Intended

Abaixo estão algumas tarefas comuns que podem ser executadas com expressões regulares, juntamente com dicas de solução de problemas se você não obtiver os resultados esperados:

  • Validando sequências de caracteres .Um expressão regular de validação de string deve começar com o caractere ^.Isso instrui o mecanismo-expressão regular para iniciar a correspondência com o padrão especificado no início da sequência de caracteres.Para obter mais informações, consulte Construindo uma função de validação em Visual Basic. e Asserções Atômicas de Largura Zero.

  • Correspondência com Quantifiers. As expressões regulares quantifiers (*,+,?,{}) são greedy ,significando que correspondem à sequência mais longa possível.No entanto, para alguns padrões, convém usar correspondência lazy para obter a sequência de caracteres mais curta possível.Os quantifiers-expressão regular lazy são *?, +?, ?? e {}?.Para obter mais informações, consulte Quantificadores.

  • Correspondência com quantifiers aninhados. Ao usar quantifiers aninhados, certifique-se de que todas as quantifiers são greedy ou lazy.Caso contrário, os resultados da correspondência serão difíceis de se prever.

Acessando as Sequências de Caracteres Capturadas

Depois que um expressão regular está localizando suas sequências pretendidas, convém capturar essas sequências de caracteres e, em seguida, acessar o que você capturou.Você pode usar construções de agrupamento para capturar as sequências de caracteres que correspondam aos grupos de subexpressões na sua expressão regular.Para obter mais informações, consulte Agrupando Construtores.

Existem várias etapas envolvidas na acesso às sequências de caracteres capturadas com grupos aninhados.

Para acessar texto capturado

  1. Crie um objeto Regex para uma expressão regular.

  2. Chame o método Match para obter o objeto Match.

    O objeto Match contém informações sobre como a expressão regular corresponde à sequência de caracteres.

  3. Iterar sobre os objetos Group armazenados no objeto Match da coleção Groups .

    Os objetos Group contêm informações sobre os resultados que um único grupo captura.

  4. Iterar sobre os objetos Capture armazenados em cada objeto Group da coleção Captures .

    Cada objeto Capture contém informações sobre uma subexpressão capturada única, incluindo a subsequência correspondente e local.

Por exemplo, o código a seguir demonstra como acessar as sequências de caracteres capturadas com um expressão regular que contenha três grupos de captura:

    ''' <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

Consulte também

Tarefas

Solução de Problemas com cadeias de caracteres em Visual Basic

Conceitos

Construindo uma função de validação em Visual Basic