Класс Regex
по умолчанию выполняет поиск по всей многострочной строке и находит совпадения, охватывающие несколько строк.Однако, может ли совпадение занимать несколько строк, зависит от вашего шаблона.Если шаблон, который вы даете, говорит, что все совпадения должны быть в одной строке, то, очевидно, он не вернет многострочных совпадений.Так, например:
Dim input As String = "Canine
Dog
K9
D
o
g
Puppy"
Dim count As Integer = Regex.Matches(input, "Dog").Count
Dim countMulti As Integer = Regex.Matches(input, "D\s*o\s*g").Count
Console.WriteLine(count) ' Outputs "1"
Console.WriteLine(countMulti) ' Outputs "2"
Так как \s*
означает любое количество пробелов (включая новые строки), второй шаблон будет соответствовать второму, где каждая буква находится на отдельной строке.
Итак, если это работает по умолчанию, и вы спрашиваете об этом, я предполагаю, что реальная проблема заключается в том, что вы не допускаете новых строк в вашем шаблоне.Так, например, это будет работать:
Dim input As String = "<tr class=""hl"">
<td class=""vil fc"">
<a href=""mypage.php?New=4645"">
name </a>
</td>"
Dim m As Match = Regex.Match(input, "<a[^>]*>((?:.|\s)*?)</a>")
If m.Success Then
Dim g As String = m.Groups(1).Value
Console.WriteLine(g) ' Outputs vbCrLf & " name "
End If
Распространенным предположением является то, что .
будет соответствовать чему угодно, включая символы новой строки, но обычно это не так.По умолчанию .
соответствует только символам , но символам новой строки.Если вы хотите, чтобы .
также включал новые строки, вы можете сделать это, указав, возможно, путанно названный параметр RegexOptions.Singleline
.Так, например, это тоже работает:
Dim input As String = "<tr class=""hl"">
<td class=""vil fc"">
<a href=""mypage.php?New=4645"">
name </a>
</td>"
Dim m As Match = Regex.Match(input, "<a[^>]*>(.*?)</a>", RegexOptions.Singleline)
If m.Success Then
Dim g As String = m.Groups(1).Value
Console.WriteLine(g) ' Outputs vbCrLf & " name "
End If
Чтобы решить ваши дополнительные проблемы, упомянутые в комментариях, если вы хотите сопоставлять только ссылки, содержащие в себе параметр newdid
, вы можете сделать что-то вроде этого:
<a\s+[^>]*href\s*=[^>]*newdid\s*=[^>]*>(.*?)</a>