using classic asp for regular expression

2019-01-25 11:40发布

问题:

We have some Classic asp sites, and i'm working on them a lil' bit, and I was wondering how can I write a regular expression check, and extract the matched expression:

the expression I have is in the script's name so Let's say this

Response.Write Request.ServerVariables("SCRIPT_NAME")

Prints out:

review_blabla.asp
review_foo.asp
review_bar.asp

How can I get the blabla, foo and bar from there?

Thanks.

回答1:

Whilst Yots' answer is almost certainly correct, you can achieve the result you are looking for with a lot less code and somewhat more clearly:

'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

Additionally, I have yet to find a better RegEx playground than Regexr, it's brilliant for trying out your regex patterns before diving into code.



回答2:

You have to use the Submatches Collection from the Match Object to get your data out of the review_(.*?)\.asp Pattern

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


回答3:

You can do

review_(.*?)\.asp

See it here on Regexr

You will then find your result in capture group 1.



回答4:

You can use RegExp object to do so. Your code gonna be like this:

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

Sorry, I can't test code below right now. Check out usage at MSDN http://msdn.microsoft.com/en-us/library/ms974570.aspx