Я пытаюсь выполнить поиск регулярного выражения в строке, назначенной содержимому HTML-поиска в Интернете. Образец, который я пытаюсь сопоставить, имеет следующий формат: HQ 12345
, второй фрагмент также может начинаться с буквы, так что HQ A12345
также является возможностью. Как показано в приведенном ниже коде, шаблон регулярного выражения, который я использую, равен "HQ .*[0-9]"
.Регулярный шаблон выражения Соответствие HTML-контенту
Проблема в том, что я запускаю поиск в регулярном выражении, который соответствует шаблону, а не только HQ 959693
, но также включает в себя остальную часть содержимого файла html, как показано в снимок окна сообщения ниже.
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
Я не знаком с VBA, но имел ту же проблему в C++. Я думаю, что строка в поле сообщения правильная, потому что ваш механизм regex возвращает любую строку, которая содержит (!) Ваше регулярное выражение. В C++ я должен был заставить движок возвращать строку только в том случае, если она точно соответствует (!) Правильному выражению. В C++ большинство движков предоставляют свойство или функцию «exactMatch()» для этого. Может быть, ваш VBA-двигатель обеспечивает аналогичную функциональность? – MichaelXanadu