首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >经典ASP RegExp小改动

问经典ASP RegExp小改动
EN

Stack Overflow用户
提问于 2010-10-26 17:43:40
回答 1查看 1.3K关注 0票数 0

我有一些正则表达式代码来获取页面上title标记之间的数据:

代码语言:javascript
复制
<%
    Function UrlExists(sURL)
        Dim objXMLHTTP
        Dim thePage
        Dim strPTitle   
        Dim blnReturnVal
        Dim objRegExp
        Dim strTitleResponse

        'Create object
        Set objXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
        on error resume next

        'Get the head
        objXMLHTTP.Open "HEAD", sURL, false
        objXMLHTTP.setRequestHeader "User-Agent", Request.ServerVariables("HTTP_HOST")
        objXMLHTTP.Send ""

        '404?        
        If Err.Number <> 0 or objXMLHTTP.status <> 200 then blnReturnVal = "0|404 Error" Else blnReturnVal = "1|"
        objXMLHTTP.close

        'If not 404
        if left(blnReturnVal,1) = "1" then

            'Get the physical page
            objXMLHTTP.Open "GET", sURL, false
            objXMLHTTP.Send ""
                thePage = objXMLHTTP.responseText 
                thePage = replace(thePage, vbCrlf, "")
            objXMLHTTP.close

            'Find title
            Set objRegExp = New Regexp

            objRegExp.IgnoreCase = true
            objregexp.Multiline = true
            objRegExp.Global = false
            objRegExp.Pattern = "<title[^>]*?>(.*)</title>" 

            set strPTitle =  objRegExp.Execute(thePage)
            strTitleResponse = strPTitle.Item(0).Value
            strTitleResponse = replace(strTitleResponse, vbCrlf, "")
            strTitleResponse = trim(strTitleResponse)
            if len(strTitleResponse) <1 OR strTitleResponse = "" then strTitleResponse = "(No Title)"

            set objRegExp = nothing
            strTitleResponse = replace(strTitleResponse,"</title>","")
            strTitleResponse = replace(strTitleResponse,"<title>","")
            strTitleResponse = replace(strTitleResponse,"'","&#39; ")
            blnReturnVal = blnReturnVal & strTitleResponse

        end if

        Set objXMLHTTP = nothing

        UrlExists = blnReturnVal
    End Function
%>        

这工作得很好,已经有好几个月了,但是当我写它的时候(愚蠢吗?)我假设每个页面只有一个标题标签,或者没有标题标签。它最近开始在John Lewis page上抛出奇怪的错误,因为它的HTML语言中有两个标题:

代码语言:javascript
复制
    <title>John Lewis - Shop online at Britain's Favourite Retailer</title>
... bunch of html
<title>

    </title>

如何修改regexp,使其只匹配第一个匹配对,而不会与上面的HTML混淆?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-26 17:45:15

在所有这些“你应该使用解析器”之前:让你正则表达式non-greedy

代码语言:javascript
复制
objRegExp.Pattern = "<title[^>]*?>(.*?)</title>" 

注意在.*之后添加的?。默认情况下,.*将尽可能匹配。这种行为与额外的?相反,现在尽可能少地匹配。

警告:我对经典的ASP (或者“现代”ASP,如果有的话)的正则表达式一无所知,但是由于非贪婪/懒惰操作符已经在<title>标签匹配上使用了,我认为它会起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4022440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档