正则表达式模式匹配HTML内容

时间:2014-02-20 15:13:16

标签: html regex vba

我正在尝试对分配给Web搜索的HTML内容的字符串执行正则表达式搜索。我想要匹配的模式具有以下格式HQ 12345第二个片段也可以以字母开头,因此HQ A12345也是可能的。如下面的代码所示,我使用的正则表达式模式是"HQ .*[0-9]"

问题是,当我运行正则表达式搜索时,匹配的模式不仅仅是HQ 959693,还包括其余的html文件内容,如下面消息框的快照所示。 RegEx Pattern Matched

Sub Test()
   Dim mystring As String
   mystring = getHTMLData("loratadine")
   Dim rx As New RegExp
   rx.IgnoreCase = True
   rx.MultiLine = False
   rx.Global = True
   rx.Pattern = "HQ .*[0-9]"
   Dim mtch As Variant
   For Each mtch In rx.Execute(mystring)
      Debug.Print mtch
      MsgBox(mtch)
   Next
End Sub

Public Function getHTMLData (ByVal name As String) As String
   Dim XMLhttp: Set XMLhttp = CreateObject("MSXML2.ServerXMLHTTP")
   XMLhttp.setTimeouts 2000, 2000, 2000, 2000
   XMLhttp.Open "GET", "http://rulings.cbp.gov/results.asp?qu=" & name & "&p=1", False
   XMLhttp.send

   If XMLhttp.Status = 200 Then
      getHTMLData = XMLhttp.responsetext
   Else
      getHTMLData = ""
   End If
End Function

2 个答案:

答案 0 :(得分:2)

使用?指定非贪婪,否则匹配将消耗直到整个字符串的最后一位数。此外,您只匹配一个数字出现。添加+以指定“一个或多个”,以便符合您的目标:

HQ .*?[0-9]+

或者,你可以尝试使用这样的否定字符类:

HQ [^0-9]*[0-9]+

或者你甚至可以进一步简化它:

HQ [^\d]*\d+

答案 1 :(得分:1)

默认情况下,正则表达式匹配是贪婪的。不幸的是,我无法准确地重现你的问题,但我很确定这是因为你是一个长字符串,最后用'。*'与一个数字匹配。

我发现此链接很有用,请参阅底部附近关于*

贪婪的解释

http://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm

我建议您将正则表达式更改为:

HQ .*?[0-9]+

这将匹配“HQ”和任意数量的字符,后跟任意数量的数字字符。由于“?”,它还会消耗“。*”中的最小量。

如果这不起作用,请回复,我将在Excel中运行正则表达式。