如果你想使用InStr
要在字符串中搜索特定子字符串的所有出现位置,您需要重复调用该函数,在最后一个匹配后(至少)一个字符开始每个新搜索。
response = "..." 'your HTTP response string
srch = "..." 'the string you want to find in the response
start = 1
Do
pos = InStr(start, response, srch, vbTextCompare)
If pos > 0 Then
start = pos + 1 'alternatively: start = pos + Len(srch)
WScript.Echo pos
WScript.Echo Mid(response, pos, Len(srch))
End If
Loop While pos > 0
如果您希望比较区分大小写,请替换vbTextCompare
with vbBinaryCompare
.
Edit:要查找以某个字符串开头、包含另一个字符串并以第三个字符串结尾的模式,最好使用正则表达式 https://msdn.microsoft.com/en-us/library/6wzad2b2%28v=vs.84%29.aspx. @TylerStandishMan https://stackoverflow.com/users/2062411/tyler-standishman已经展示了基本原理他的回答 https://stackoverflow.com/a/35241153/1630171,但是在您的场景中需要观察一些事情。
response = "..." 'your HTTP response string
startTerm = "startstring"
midTerm = "midstring"
endTerm = "endstring"
Set re = New RegExp
re.Pattern = startTerm & "[\s\S]*?" & midTerm & "[\s\S]*?" & endTerm
re.Global = True
re.IgnoreCase = True 'if required
For Each m In re.Execute(response)
WScript.Echo m
Next
a 中的一些字符正则表达式 https://msdn.microsoft.com/en-us/library/1400241x%28v=vs.84%29.aspx有特殊含义(例如.
匹配除换行符之外的任何字符),因此您需要确保开始、中间和结束术语中的任何此类字符均已正确转义(例如使用\.
用于匹配文字点)。如果您要匹配的子字符串跨越一行以上,您需要表达式中与搜索词之间的任意文本匹配的部分来包含换行符(例如[\s\S]
匹配任何空白或非空白字符)。您可能还想让匹配变得非贪婪,否则您将从第一次出现时得到一个匹配startTerm
到最后一次出现endTerm
。修改器就是这样的*?
is for.