我正在尝试在两个其他字符串之间找到一个字符串。此函数工作正常,但只要我使用转义字符(“”)它就会停止工作并发生运行时错误。功能与下面的工作/非工作示例:
功能:
Public Function GetBetween(ByVal haystack As String, ByVal needle As String, ByVal needle_two As String) As String
Dim istart As Integer = InStr(haystack, needle)
If istart > 0 Then
Dim istop As Integer = InStr(istart, haystack, needle_two)
If istop > 0 Then
Dim value As String = haystack.Substring(istart + Len(needle) - 1, istop - istart - Len(needle))
Return value
End If
End If
Return Nothing
End Function
工作示例:
Dim Haystack As String = "hello find me world"
Dim FindIt As String = GetBetween(Haystack, "hello", "world")
MessageBox.Show(FindIt)
非工作示例(使用转义“”“Chars”:
Dim Haystack As String = "<input type=""hidden"" name=""testsubmit"" id=""testsubmit"" value=""findme"" />"
Dim FindIt As String = GetBetween(Haystack, "id=""testsubmit"" value=""", """")
MessageBox.Show(FindIt)
错误: ArgumentOutOfRangeException未处理 长度不能小于零。 参数名称:长度
所以基本上我的功能是不允许我在搜索转义字符时使用它。
答案 0 :(得分:2)
通过将字符串中的字符串替换为其他字符,并且看到函数调用以完全相同的方式失败,您可以轻松确定问题与转义引号无关。
两个测试字符串之间的真正区别在于,在您的第一个示例中,needle_two
字符串 not 出现在needle
字符串中,而在第二个示例中确实。换句话说,您的问题是,您开始寻找needle_two
开始的needle
,而不是它结束的地方,istop
最终在{{1}内}}
您需要做的是在needle
停止后开始搜索:
needle