VB.NET获取字符串Betwen两个字符串 - 不使用转义字符

时间:2011-10-06 16:05:48

标签: regex vb.net

我正在尝试在两个其他字符串之间找到一个字符串。此函数工作正常,但只要我使用转义字符(“”)它就会停止工作并发生运行时错误。功能与下面的工作/非工作示例:

功能:

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未处理 长度不能小于零。 参数名称:长度

所以基本上我的功能是不允许我在搜索转义字符时使用它。

1 个答案:

答案 0 :(得分:2)

通过将字符串中的字符串替换为其他字符,并且看到函数调用以完全相同的方式失败,您可以轻松确定问题与转义引号无关。

两个测试字符串之间的真正区别在于,在您的第一个示例中,needle_two字符串 not 出现在needle字符串中,而在第二个示例中确实。换句话说,您的问题是,您开始寻找needle_two 开始的needle ,而不是它结束的地方,istop最终在{{1}内}}

您需要做的是在needle停止后开始搜索:

needle