Bisogno di aiuto per capire la differenza tra l'utilizzo simile RegExp dove 1 opere e 1 non

voti
0

Sono un grande fan di StackOverflow, anche se sono nuovo ad usare le espressioni regolari. Ho un programma di utilità di ricerca QND che ho scritto per aiutarmi a trovare / cose di report che sto cercando nel codice sorgente. Sto avendo un problema con capire cosa c'è di sbagliato con il mio modello di ricerca che non è restituendo una stringa match che include tutto il testo tra due doppi apici. In una ricerca che funziona (alla ricerca di variabili di sessione), ma in uno simile (alla ricerca di redirect) non è così.

Ecco un file di aspx.vb esempio che sto testando contro:

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

partita Sucessful:

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)

corrispondenza non riuscita:

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.

Sintomo:

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.

codice VB di esempio è il seguente:

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

Sto cercando alcune indicazioni per capire perché il mio semplice ricerca funziona solo con un particolare modello, e non un altro che cambia solo il testo che porta da abbinare in modo esplicito.

È pubblicato 02/12/2019 alle 23:51
fonte dall'utente
In altre lingue...                            


1 risposte

Bisogno di aiuto per capire la differenza tra l'utilizzo simile RegExp dove 1 opere e 1 non

voti
0

Sono un grande fan di StackOverflow, anche se sono nuovo ad usare le espressioni regolari. Ho un programma di utilità di ricerca QND che ho scritto per aiutarmi a trovare / cose di report che sto cercando nel codice sorgente. Sto avendo un problema con capire cosa c'è di sbagliato con il mio modello di ricerca che non è restituendo una stringa match che include tutto il testo tra due doppi apici. In una ricerca che funziona (alla ricerca di variabili di sessione), ma in uno simile (alla ricerca di redirect) non è così.

Ecco un file di aspx.vb esempio che sto testando contro:

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

partita Sucessful:

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")

corrispondenza non riuscita:

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.

Sintomo:

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.

codice VB di esempio è il seguente:

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

Sto cercando alcune indicazioni per capire perché il mio semplice ricerca funziona solo con un particolare modello, e non un altro che cambia solo il testo che porta da abbinare in modo esplicito.

Risposto il 02/12/2019 a 23:51
fonte dall'utente

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