используя классический asp для регулярного выражения - PullRequest
8 голосов
/ 13 июля 2011

У нас есть несколько классических ASP-сайтов, и я работаю над ними, и мне было интересно, как я могу написать проверку регулярного выражения и извлечь совпадающее выражение:

выражение у меня есть в названии сценария так скажем так

Response.Write Request.ServerVariables("SCRIPT_NAME")

Распечатывает:

review_blabla.asp
review_foo.asp
review_bar.asp

Как мне получить оттуда blabla, foo и bar?

Спасибо.

Ответы [ 4 ]

18 голосов
/ 14 июля 2011

Хотя ответ Йотса почти наверняка верен, вы можете достичь результата, которого вы ищете, с гораздо меньшим количеством кода и несколько более четко:

'A handy function i keep lying around for RegEx matches'
Function RegExResults(strTarget, strPattern)

    Set regEx = New RegExp
    regEx.Pattern = strPattern
    regEx.Global = true
    Set RegExResults = regEx.Execute(strTarget)
    Set regEx = Nothing

End Function

'Pass the original string and pattern into the function and get a collection object back'
Set arrResults = RegExResults(Request.ServerVariables("SCRIPT_NAME"), "review_(.*?)\.asp")

'In your pattern the answer is the first group, so all you need is'
For each result in arrResults
    Response.Write(result.Submatches(0))
Next

Set arrResults = Nothing

Кроме того, мне еще предстоит найти лучший Регулярная игровая площадка, чем Regexr , она великолепна для того, чтобы опробовать ваши шаблоны регулярных выражений перед тем, как погрузиться в код.

4 голосов
/ 13 июля 2011

Для получения данных из шаблона review_(.*?)\.asp

вы должны использовать коллекцию подсовпадений из объекта Match.
Function getScriptNamePart(scriptname)
    dim RegEx : Set RegEx = New RegExp
    dim result : result = ""
    With RegEx
        .Pattern = "review_(.*?)\.asp"
        .IgnoreCase = True
        .Global = True
    End With

    Dim Match, Submatch
    dim Matches : Set Matches = RegEx.Execute(scriptname)    
    dim SubMatches
    For Each Match in Matches
        For Each Submatch in Match.SubMatches
                result = Submatch
        Exit For
        Next
    Exit For
    Next

    Set Matches = Nothing
    Set SubMatches = Nothing
    Set Match = Nothing
    Set RegEx = Nothing

    getScriptNamePart = result
End Function
0 голосов
/ 13 июля 2011

Вы можете использовать объект RegExp для этого. Ваш код будет таким:

Set RegularExpressionObject = New RegExp
RegularExpressionObject.Pattern = "review_(.*)\.asp"
matches = RegularExpressionObject.Execute("review_blabla.asp")

Извините, сейчас я не могу проверить приведенный ниже код. Проверьте использование на MSDN http://msdn.microsoft.com/en-us/library/ms974570.aspx

0 голосов
/ 13 июля 2011

Вы можете сделать

review_(.*?)\.asp

См. здесь на Regexr

Затем вы найдете свой результат в группе захвата 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...