<%
'==================================== = ===
class EngineerSearch
'Laolong:laolong9999@sina.com
': XML을 시뮬레이션하여 http 태그 리소스를 얻습니다(XML이 왜 유용한지는 사용하고 나면 알게 될 것입니다:))
' 엔진 검색 사용 (엔진 정보 또는 해당 하이퍼링크된 웹사이트의 정보 또는 특정 페이지의 직접 관련 정보를 정규식 및 xmlHttp를 사용하여 표시,
'프로그램 사용 시 정규식 구성이 필요함)
'--- ----- ------------------- ----- -----
비공개 oReg,oxmlHttp'a 일반, Microsoft xmlhttp
'--------- ---- -----------------------
public sub class_initialize()' 객체 생성 트리거
set oReg=new regExp
oReg.Global=true
oReg.IgnoreCase=true
set oXmlHttp=server.createobject("Microsoft.XmlHttp")
end sub
'--- --------------------------------- ---- ----------
public sub class_terminate()'객체 파괴 트리거
set oReg=nothing' 클래스에서 자체 구축된 객체를 수동으로 해제해야 하며 ASP는 자동으로만 해제됩니다. 클래스에 의해 정의된 개체를 해제합니다.
set oXmlHttp=nothing
If typename(tempReg)<>"nothing" then'메서드 본문의 개체가 리소스를 해제합니다.
set tempReg=nothing
end if
end sub
' --------------------------- ---------- -------------
'엔진 레벨 검색
공용 기능 Engineer(url,EngineerReg)
'기능 소개: Get the url 정보 반환(보통 엔진 검색에 사용됨), EngineerReg의 특정 정보 추출,
' 함수 이름에 설정된 일치 항목을 반환합니다. URL 쿼리 결과를 얻고,engineReg에서 정의한 결과를 검색하고 일치 컬렉션을 생성합니다.
'컬렉션 생성 및 컬렉션 수(vbscript) 작업이 불가능하므로 직접 컬렉션을 순회하는 것이 가장 좋습니다. 또는 2차원 배열
dim strConent
strContent=oXmlHttp.open("get",url,false)
오류 발생 시 다음
oXmlHttp.send()
재개를 고려할 수 있습니다. err.number<>0이면
기능 종료
end if
strContent=bytes2BSTR(oXmlHttp.responseBody)
if isnull(EngineerReg)이면
engineer=AbsoluteURL(strContent,url)
else
oReg.Pattern= EngineerReg
setengine=oReg.Execute(AbsoluteURL(strContent,url))
end if
end function
'------- --------- --------------- ----
'한자 코딩, (네티즌)
public Function bytes2BSTR(vIn)
strReturn = ""
For i = 1 To LenB(vIn)
ThisCharCode = AscB( MidB(vIn,i,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,i 1,1))
strReturn = strReturn & Chr ( CLng(ThisCharCode) * &H100 CInt(NextCharCode))
i = i 1
End If
Next
bytes2BSTR = strReturn
함수 종료
'------------------------ --------- -----
public Function SearchReplace(strContent,ReplaceReg,ResultReg)
'교체, strContent의 replacementReg로 설명된 문자열을 resultReg로 설명된 문자열로 바꾸고 반환 검색 교체
'일반 교체 교체가 캡슐화되어 있습니다.
oReg.Pattern=ReplaceReg
SearchReplace=oReg.replace(strContent,ResultReg)
함수 종료
'---------------------- ------ ------------------ -
public Function AbsoluteURL( strContent, byval url)
'strContent의 상대 URL을 oXmlHttp에 지정된 url의 절대 주소로 변경합니다(http/https/ftp/mailto:)
'일반 규칙 수정될 수 있습니다.
dim tempReg
set tempReg=new RegExp
tempReg.IgnoreCase=true
tempReg.Global=true
tempReg.Pattern="(^.*/).*$"'파일 포함 이름 http://www.wrclub.net/default.aspx
Url=tempReg.replace(url,"$1")
tempReg.Pattern="((?:src|href)의 표준 경로 .* ?=['u0022](?!ftp|http|https|mailto))"
AbsoluteURL=tempReg.replace(strContent,"$1" Url)
set tempReg=nothing
end Function
'--------------------- - ---------------
수업 종료
'========================= === ============
%>
<%'예
Response.CharSet = "GB2312"
dim mySearch
mySearch 설정 =new EngineerSearch
'URL은 파일 확장자를 포함한 전체 주소여야 합니다. 결과는 컬렉션입니다. 하위 쿼리는 myMatches(0).subMatches(0)와 같이 참조되어야 합니다.
set myMatches=mySearch .engineer("http://www.wrclub.net/default.aspx","
")
if myMatches.count=0이면
response.write "일반 문자열이 없으면"
end if
if myMatches.count>0 then
response.write myMatches.count&"
"
myMatches의 각 키에 대해
response.write key.firstindex&":"&cstr(key.value)&"
"
다음
end if