Поделиться через


Устранение неполадок, связанных с регулярными выражениями, в Visual Basic

В данном разделе рассматриваются некоторые наиболее часто возникающие проблемы при работе с регулярными выражениями, а также содержатся советы по устранению этих неполадок и процедура доступа к записанным строкам.

Несоответствие намеченному шаблону

Ниже перечислены некоторые общие задачи, которые можно выполнять с помощью регулярных выражений, а также советы по устранению неполадок, если полученный результат отличается от желаемого.

  • Проверка строк. При проверке строки регулярное выражение должно начинаться с символа ^. Это дает механизму регулярных выражений команду для запуска в соответствии с указанным шаблоном в начале строки. Дополнительные сведения см. в разделе Создание функции проверки в Visual Basic. и Привязки в регулярных выражениях.

  • Соответствие кванторам. Кванторы регулярных выражений (* + ?, {}) являются "жадными", то есть они соответствуют наиболее длинной строке. Однако в некоторых шаблонах, возможно, потребуется использовать ленивые кванторы, соответствующие наиболее короткой строке. "Ленивыми" кванторами регулярных выражений являются *?, +?, ?? и {}?. Дополнительные сведения см. в разделе Кванторы.

  • Соответствие вложенным кванторам. При использовании вложенных кванторов следует убедиться, что все кванторы являются "жадными" или "ленивыми". В противном случае сложно прогнозировать результаты совпадений.

Доступ к записанным строкам

Когда регулярное выражение осуществляет поиск нужных строк, можно записывать эти строки, а затем обращаться к ним. Для записи строк, соответствующих группам подвыражений в регулярном выражении, можно использовать конструкции группировки. Дополнительные сведения см. в разделе Конструкции группирования.

Доступ к строкам с вложенными группами выполняется в несколько шагов.

Чтобы обратиться к записанному тексту

  1. Создайте объект Regex для регулярного выражения.

  2. Вызовите метод Match для получения объекта Match.

    Объект Match содержит сведения о соответствии регулярного выражения строке.

  3. Выполните итерацию по объектам Group, хранящимися в коллекции Groups объектов Match.

    Объекты Group содержат сведения о результатах отдельной группы записи.

  4. Выполните итерацию по объектам Capture, хранящимися в каждой коллекции Captures объектов Group.

    Каждый объект Capture содержит сведения об одном записанном подвыражении, включая сопоставляемую подстроку и расположение.

Например, в следующем коде демонстрируется получение доступа к строкам, записанным с помощью регулярного выражения и содержащим три группы записи.

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

См. также

Задачи

Устранение неполадок при работе со строками в Visual Basic

Основные понятия

Создание функции проверки в Visual Basic