Besoin d'aide à comprendre la différence entre l'utilisation de RegExp similaire où 1 œuvres et 1 ne pas

voix
0

Je suis un grand fan de stackoverflow, bien que je suis nouveau à l'utilisation des expressions régulières. J'ai un utilitaire de recherche de QND que j'ai écrit pour me aider à trouver des choses / rapport Je cherche dans le code source. Je vais avoir un problème avec de trouver ce qui ne va pas avec mon patron recherche qui ne revient pas une chaîne de correspondance qui comprend tout le texte entre deux guillemets doubles. Dans une recherche, il fonctionne (recherche de variables de session), mais dans un semblable (recherche de redirection) il ne fonctionne pas.

Voici un exemple de fichier aspx.vb que je teste contre:

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

match de 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)

Échec correspondant:

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.

Symptôme:

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.

Exemple de code VB est la suivante:

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

Je cherche quelques conseils pour comprendre pourquoi ma recherche fonctionne uniquement avec un modèle particulier, et non un autre qui ne change que le texte conduisant à correspondre explicitement.

Créé 02/12/2019 à 23:51
source utilisateur
Dans d'autres langues...                            


1 réponses

Besoin d'aide à comprendre la différence entre l'utilisation de RegExp similaire où 1 œuvres et 1 ne pas

voix
0

Je suis un grand fan de stackoverflow, bien que je suis nouveau à l'utilisation des expressions régulières. J'ai un utilitaire de recherche de QND que j'ai écrit pour me aider à trouver des choses / rapport Je cherche dans le code source. Je vais avoir un problème avec de trouver ce qui ne va pas avec mon patron recherche qui ne revient pas une chaîne de correspondance qui comprend tout le texte entre deux guillemets doubles. Dans une recherche, il fonctionne (recherche de variables de session), mais dans un semblable (recherche de redirection) il ne fonctionne pas.

Voici un exemple de fichier aspx.vb que je teste contre:

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

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

Échec correspondant:

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.

Symptôme:

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.

Exemple de code VB est la suivante:

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

Je cherche quelques conseils pour comprendre pourquoi ma recherche fonctionne uniquement avec un modèle particulier, et non un autre qui ne change que le texte conduisant à correspondre explicitement.

Créé 02/12/2019 à 23:51
source utilisateur

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