Например, у меня есть небольшая функция, которая возвращает строку между двумя другими строками (например, между одинарными, двойными кавычками или даже простым тегом html).
Dim exp As String = String.Format("{0}(.*?){1}", beginMarker, endMarker)
Теперь, если я передам «‹b›» для маркера начала и «‹/b›» для маркера конца и не укажу регистр RegEx.Ignore, он правильно вернет соответствующий нижний регистр ‹b›‹/b ›. Однако, как только я указываю IgnoreCase, он никогда не возвращается (при условии того же ввода). Вот пример функции (удалите RegexOptions.IgnoreCase, и она заработает). Кроме того, независимо от того, избегаю ли я вводимых маркеров, это не меняет вывод, единственная разница заключается в IgnoreCase:
Мой вопрос: что мне не хватает (я использовал простой пример, потому что на самом деле я не анализирую HTML с атрибутами)?
Ввод: beginMarker = "‹b›"
Ввод: endMarker = "‹/b›"
Ввод: searchText = "‹b›это тест‹/b›"
Ввод: beginMakers (не имеет значения, True или False)
Public Shared Function GetStringInBetween(beginMarker As String, endMarker As String, searchText As String, includeMarkers As Boolean) As List(Of String)
beginMarker = RegularExpressions.Regex.Escape(beginMarker)
endMarker = RegularExpressions.Regex.Escape(endMarker)
Dim exp As String = String.Format("{0}(.*?){1}", beginMarker, endMarker)
Dim regEx As New RegularExpressions.Regex(exp)
Dim returnList As New List(Of String)
For Each m As Match In regEx.Matches(searchText, 0, RegexOptions.IgnoreCase)
If includeMarkers = True Then
returnList.Add(m.Value)
Else
returnList.Add(m.Value.TrimStart(beginMarker.ToCharArray).TrimEnd(endMarker.ToCharArray))
End If
Next
Return returnList
End Function
<b><b></b>Something</b>
- person Wug   schedule 23.07.2012