Устранение неполадок, связанных с регулярными выражениями, в Visual Basic
В данном разделе рассматриваются некоторые наиболее часто возникающие проблемы при работе с регулярными выражениями, а также содержатся советы по устранению этих неполадок и процедура доступа к записанным строкам.
Несоответствие намеченному шаблону
Ниже перечислены некоторые общие задачи, которые можно выполнять с помощью регулярных выражений, а также советы по устранению неполадок, если полученный результат отличается от желаемого.
Проверка строк. При проверке строки регулярное выражение должно начинаться с символа ^. Это дает механизму регулярных выражений команду для запуска в соответствии с указанным шаблоном в начале строки. Дополнительные сведения см. в разделе Создание функции проверки в Visual Basic. и Привязки в регулярных выражениях.
Соответствие кванторам. Кванторы регулярных выражений (* + ?, {}) являются "жадными", то есть они соответствуют наиболее длинной строке. Однако в некоторых шаблонах, возможно, потребуется использовать ленивые кванторы, соответствующие наиболее короткой строке. "Ленивыми" кванторами регулярных выражений являются *?, +?, ?? и {}?. Дополнительные сведения см. в разделе Кванторы.
Соответствие вложенным кванторам. При использовании вложенных кванторов следует убедиться, что все кванторы являются "жадными" или "ленивыми". В противном случае сложно прогнозировать результаты совпадений.
Доступ к записанным строкам
Когда регулярное выражение осуществляет поиск нужных строк, можно записывать эти строки, а затем обращаться к ним. Для записи строк, соответствующих группам подвыражений в регулярном выражении, можно использовать конструкции группировки. Дополнительные сведения см. в разделе Конструкции группирования.
Доступ к строкам с вложенными группами выполняется в несколько шагов.
Чтобы обратиться к записанному тексту
Создайте объект Regex для регулярного выражения.
Вызовите метод Match для получения объекта Match.
Объект Match содержит сведения о соответствии регулярного выражения строке.
Выполните итерацию по объектам Group, хранящимися в коллекции Groups объектов Match.
Объекты Group содержат сведения о результатах отдельной группы записи.
Выполните итерацию по объектам 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