快速正则表达式匹配问题

时间:2010-11-13 05:12:13

标签: regex vb.net parsing

(是的,我正在使用正则表达式来解析HTML,这是我所知道的唯一解决方案)

我无法为下面的代码创建正则表达式,每页大约有10个匹配项。

<A href="viewmessage.aspx?message_id=1906782643&Guid=25851900&SID=k1fprtq2dbadgshntng1w3qb" style="text-decoration:underline">Inner Text</A>

这是正在尝试的正则表达式

下面是我通常用于获取匹配集合的代码

Private Function Extract(ByVal source As String) As String()
        Dim mc As MatchCollection
        Dim i As Integer
        mc = Regex.Matches(source, _
"<A href=" & Chr(34) & "viewmessage.aspx?message_id *.</A>")
        Dim results(mc.Count - 1) As String
        For i = 0 To results.Length - 1
            results(i) = mc(i).Value
        Next
        Return results
    End Function

Dim str1 As String()
        Dim str2 As String
        Dim results As New StringBuilder
        str1 = Extract(result)
        For Each str2 In str1
            results.Append(str2 & vbNewLine)
        Next

RTBlinks.Text = results.ToString

有谁可以指出我做错了什么?我花了几个小时尝试不同的事情。

我尝试主要作为一种爱好进行编程,所以如果我发出任何明显的错误,我会道歉。

1 个答案:

答案 0 :(得分:2)

您需要*. .**。现在,量词.*被应用于它之前的空间,并且点恰好匹配一个字符。切换两个,删除空格(这很重要,此时测试字符串中没有空格),然后重试。

请注意<A>贪婪地匹配,我。即尽可能多的字符(换行除外)。因此,如果每行不超过一个.*?标记,它仍应有效。更安全的是[^<]*,使点匹配尽可能少的字符;更安全的"<A href=""viewmessage.aspx?message_id=.*?</A>" ,除了打开尖括号外,还可以匹配任何内容,确保我们不会越过标签边界。

然而,所有这些措施在某些情况下失败,而不是罕见的情况(想想评论,属性字符串,嵌套标记,无效标记),这就是为什么只有在你可以准确控制输入并知道你才能让正则表达式在标记语言上松散的原因你的局限。

另外,我认为在VB.NET中你可以通过加倍来转义字符串中的引号,所以你可以简单地写一下

{{1}}