Нужна помощь, чтобы понять разницу между подобным использованием RegExp, где 1 работает и 1 не

голоса
0

Я большой поклонник StackOverflow, хотя я новичок с помощью регулярных выражений. У меня есть утилита поиска КНИ, что я написал, чтобы помочь мне найти / REPORT вещи Я ищу в исходном коде. У меня возникли проблемы с выяснить, что случилось с моим рисунком поиском, который не возвращает строку соответствия, которая включает в себя весь текст между двумя двойными кавычками. В один поиск работает (поиск переменных Session), но в том же (один ищет переадресовывает) это не делает.

Вот пример aspx.vb файл, который я тестирую против:

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

Успешный матч:

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)

Ошибка соответствия:

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.

Симптом:

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.

Пример кода VB является:

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

Я ищу для некоторых указателей, чтобы понять, почему мой простой поиск работает только с одной конкретной моделью, а не иначе, что изменяет только ведущий текст, который будет сопоставляться явно.

Задан 02/12/2019 в 23:51
источник пользователем
На других языках...                            


1 ответов

Нужна помощь, чтобы понять разницу между подобным использованием RegExp, где 1 работает и 1 не

голоса
0

Я большой поклонник StackOverflow, хотя я новичок с помощью регулярных выражений. У меня есть утилита поиска КНИ, что я написал, чтобы помочь мне найти / REPORT вещи Я ищу в исходном коде. У меня возникли проблемы с выяснить, что случилось с моим рисунком поиском, который не возвращает строку соответствия, которая включает в себя весь текст между двумя двойными кавычками. В один поиск работает (поиск переменных Session), но в том же (один ищет переадресовывает) это не делает.

Вот пример aspx.vb файл, который я тестирую против:

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

Успешный матч:

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

Ошибка соответствия:

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.

Симптом:

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.

Пример кода VB является:

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

Я ищу для некоторых указателей, чтобы понять, почему мой простой поиск работает только с одной конкретной моделью, а не иначе, что изменяет только ведущий текст, который будет сопоставляться явно.

Ответил 02/12/2019 в 23:51
источник пользователем

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