有没有一种方法可以处理regex多行html块?

有没有一种方法可以处理regex多行html块?,html,regex,vb.net,multiline,Html,Regex,Vb.net,Multiline,它是我的html页面的一部分。 我想查找到标记之间的所有名称:

它是我的html页面的一部分。 我想查找到标记之间的所有名称: 它的多行键和“新”键每次都有不同的数字

        <tr class="hl">
        <td class="vil fc">
            <a href="mypage.php?new=4645">
                name                </a>
        </td>


默认情况下,
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
或者,您可以在正则表达式模式中指定单行选项,方法是将
(?s)
放在开头:

Dim m As Match = Regex.Match(input, "(?s)<a[^>]*>(.*?)</a>")

谢谢,它可以工作,但是包含的行太多了,我如何编辑包含newdid单词的行的正则表达式模式?检查我的html,实际上我需要
RegexOptions.SingleLine
模式。
Dim m As Match = Regex.Match(input, "(?s)<a[^>]*>(.*?)</a>")
<a\s+[^>]*href\s*=[^>]*newdid\s*=[^>]*>(.*?)</a>