Heb je hulp nodig om het verschil tussen vergelijkbare RegExp gebruik begrijpen waar 1 werkt en 1 niet het geval is

stemmen
0

Ik ben een grote fan van stackoverflow, maar ik ben nieuw op het gebruik van reguliere expressies. Ik heb een qnd zoekfunctie die ik schreef om me te helpen vinden / verslag dingen die ik ben op zoek naar in de broncode. Ik heb een probleem met het uitzoeken wat er mis is met mijn patroon zoeken die niet is terug een wedstrijd tekenreeks die alle tekst tussen twee dubbele aanhalingstekens bevat. In één zoeken het werkt (op zoek naar Sessievariabelen), maar in een soortgelijke (op zoek naar omleidingen) niet.

Hier is een voorbeeld aspx.vb bestand dat ik ben het testen tegen:

Partial Class _1
    Inherits System.Web.UI.Page
    Private strSecurityTest As String = 
    Private strUserId As String = 
    Private strPassword As String = 
    Private strMyName As String = 

    Private Sub sample()
        strSecurityTest = Session(UserID)

        If strSecurityTest = NeedsLogin Or
            strSecurityTest =  Or
            Session(SecureCount) = 0 Or
            Session(CommandName) <> strMyName Then
            Server.Transfer(WebApLogin.aspx)
        End If
    End Sub
End Class

Sucessful match:

When I look for all occurances of Session(*) with pattern ==> Session\(\\w*\\)
I get correct results.  Noting the above source code, I get 3 matches returned:

Session(UserID)
Session(SecureCount)
Session(CommandName)

Mislukt matching:

However when I try another search by replacing Session with Transfer ==> Transfer\(\\w*\\)
nothing is returned.  

I have also tried these matching patterns:
Server.Transfer(*) ==> Server\.Transfer\(\\w*\\)
*Server.Transfer(*) ==> \w*Server\.Transfer\(\\w*\\)

Each of these doesn't return any matches.

In my live code I tried removing vbCr, vbLf, vbCrLf before the regex match, but still no matches
were found.

Symptoom:

A symptom that I see is when I remove the text from the right side of the pattern, up to and
including the \w* ... then the search finds matches ==> Transfer\(\  However since the search 
is now open-ended ... I can't capture the value between the double quotes that I want.

Sample VB code is:

Private Sub TestRegExPattern(wData As String, wPattern As String, bMatchCase As Boolean)

    '
    ' Invoke the Match method.
    '                            
    Dim m As Match = Nothing
    If Not bMatchCase Then
        m = Regex.Match(wData, wPattern, RegexOptions.IgnoreCase)
    Else
        m = Regex.Match(wData, wPattern)
    End If

    '
    ' If first match found process and look for more
    '
    If (m.Success) Then
        '
        '   Process match
        '

        ' Get next match.
        While m.Success
            m = m.NextMatch()
            If m.Success Then
                '
                '   Process additional matches
                '
            End If
        End While
    End If
    m = nothing
End Sub

Ik ben op zoek naar enkele tips om te begrijpen waarom mijn eenvoudige zoekopdracht werkt alleen met een bepaald patroon, en niet een andere die alleen verandert de toonaangevende tekst expliciet worden geëvenaard.

De vraag is gesteld op 02/12/2019 om 23:51
bron van user
In andere talen...                            


1 antwoorden

Heb je hulp nodig om het verschil tussen vergelijkbare RegExp gebruik begrijpen waar 1 werkt en 1 niet het geval is

stemmen
0

Ik ben een grote fan van stackoverflow, maar ik ben nieuw op het gebruik van reguliere expressies. Ik heb een qnd zoekfunctie die ik schreef om me te helpen vinden / verslag dingen die ik ben op zoek naar in de broncode. Ik heb een probleem met het uitzoeken wat er mis is met mijn patroon zoeken die niet is terug een wedstrijd tekenreeks die alle tekst tussen twee dubbele aanhalingstekens bevat. In één zoeken het werkt (op zoek naar Sessievariabelen), maar in een soortgelijke (op zoek naar omleidingen) niet.

Hier is een voorbeeld aspx.vb bestand dat ik ben het testen tegen:

Partial Class _1
    Inherits System.Web.UI.Page
    Private strSecurityTest As String = ""
    Private strUserId As String = ""
    Private strPassword As String = ""
    Private strMyName As String = ""

    Private Sub sample()
        strSecurityTest = Session("UserID")

        If strSecurityTest = "NeedsLogin" Or
            strSecurityTest = "" Or
            Session("SecureCount") = 0 Or
            Session("CommandName") <> strMyName Then
            Server.Transfer("WebApLogin.aspx")
        End If
    End Sub
End Class

Sucessful match:

When I look for all occurances of Session("*") with pattern ==> Session\(\"\w*\"\)
I get correct results.  Noting the above source code, I get 3 matches returned:

Session("UserID")
Session("SecureCount")
Session("CommandName")

Mislukt matching:

However when I try another search by replacing "Session" with "Transfer" ==> Transfer\(\"\w*\"\)
nothing is returned.  

I have also tried these matching patterns:
Server.Transfer("*") ==> Server\.Transfer\(\"\w*\"\)
*Server.Transfer("*") ==> \w*Server\.Transfer\(\"\w*\"\)

Each of these doesn't return any matches.

In my live code I tried removing vbCr, vbLf, vbCrLf before the regex match, but still no matches
were found.

Symptoom:

A symptom that I see is when I remove the text from the right side of the pattern, up to and
including the \w* ... then the search finds matches ==> Transfer\(\"  However since the search 
is now open-ended ... I can't capture the value between the double quotes that I want.

Sample VB code is:

Private Sub TestRegExPattern(wData As String, wPattern As String, bMatchCase As Boolean)

    '
    ' Invoke the Match method.
    '                            
    Dim m As Match = Nothing
    If Not bMatchCase Then
        m = Regex.Match(wData, wPattern, RegexOptions.IgnoreCase)
    Else
        m = Regex.Match(wData, wPattern)
    End If

    '
    ' If first match found process and look for more
    '
    If (m.Success) Then
        '
        '   Process match
        '

        ' Get next match.
        While m.Success
            m = m.NextMatch()
            If m.Success Then
                '
                '   Process additional matches
                '
            End If
        End While
    End If
    m = nothing
End Sub

Ik ben op zoek naar enkele tips om te begrijpen waarom mijn eenvoudige zoekopdracht werkt alleen met een bepaald patroon, en niet een andere die alleen verandert de toonaangevende tekst expliciet worden geëvenaard.

antwoordde op 02/12/2019 om 23:51
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more