Avatar billede ducks Nybegynder
06. november 2004 - 20:54 Der er 9 kommentarer og
1 løsning

Regular Expression

Jeg henter koden ned fra en hjemmeside og vil derefter udskrive nogle udvalgte elementer fra siden, men jeg kan ikke få Regular Expression til at virke i VB6:

Jeg er kommet hertil:

    Set regex = New RegExp
        regex.IgnoreCase = True  ' Ikke case sensetiv
        regex.Global = True  ' Søg i hele strengen
        regex.Pattern = "(.*)(\<title\>)(.+)(\<\/title\>)(.*)"
    Set regex = Nothing

Men hvis jeg - som jeg ville gøre i ASP - skriver:

    titel = regEx.Replace(input, "$2")

Får jeg hele sidens kode undtagen de 2 title tags, hvordan gør jeg så jeg kun får det der står mellem <title> og </title>
Avatar billede thesurfer Nybegynder
06. november 2004 - 21:40 #1
Noget så simpelt, behøver man ikke RegExp..
Du kan nøjes med funktioner ned Mid, Len og InStr:

titel = mid(input, InStr(LCase(input), "<title>") + len("title"), InStr(LCase(input), "</title>")

Det betyder:
titel er lig startpositionen af "<title>" + længden af "<title>", fra strengen (input), og til positionen af "</title>".

Det kan godt være, at der skal indsættes "+ 1", for at tage næste bogstav..

Funktioner: http://www.w3schools.com/vbscript/vbscript_ref_functions.asp
Streng manipulation: http://www.w3schools.com/vbscript/vbscript_ref_functions.asp#string
Avatar billede thesurfer Nybegynder
06. november 2004 - 21:58 #2
Jeg har lige testet det.. det kan se sådan ud ( smid koden i Command1_Click() )

Dim strInput, strTitel
strInput = "<html><head><title>Sidens Titel</title></head><body>hello world</body></html>"

posStart = InStr(LCase(strInput), "<title>") + Len("<title>")
posSlut = InStr(LCase(strInput), "</title>") - posStart

strTitel = Mid(strInput, posStart, posSlut)
MsgBox "Titlen er '" & strTitel & "'"
Avatar billede ducks Nybegynder
06. november 2004 - 22:02 #3
din metode giver:

e>Eksperten | Velkommen til Skandinaviens største IT community</title>
    <meta http-equiv="Content-type" content='text/html; charset="iso-8859-1"' />
    <meta name="description" content="Skandinaviens st&oslash;rste IT-Community: Sp&oslash;rg og f&aring; svar p&aring

så jeg brugte den her, men det er vel også fint?

strText = Right(txt, Len(txt) - InStr(txt, "<title>") - 6)
strText = Left(strText, InStr(strText, "</title>") - 1)
Avatar billede ducks Nybegynder
06. november 2004 - 22:05 #4
Og den anden du kom med virker. Men hvad er så fordelen at bruge?
Avatar billede ducks Nybegynder
06. november 2004 - 22:13 #5
Det kan vel også være ligemeget, det virker. Smider du et svar så du kan få point?


Hvis nogen er interesseret, ser hele koden sådan ud:


'Load msinet.ocx
'Lav en Inet1
'Lav en textbox kaldet URL
'Lav en knap kaldet Command1

Function getInfo(Start_Tag As String, End_Tag As String, Page_Source As String)
    getInfo = Right(Page_Source, Len(Page_Source) - InStr(Page_Source, Start_Tag) - Len(Start_Tag) + 1)
    getInfo = Left(getInfo, InStr(getInfo, End_Tag) - 1)
End Function

Private Sub Command1_Click()
    On Error Resume Next
   
    Dim txt As String
    Dim b() As Byte
   
    Command1.Enabled = False
   
    b() = Inet1.OpenURL(URL.Text, 1)
   
    txt = ""

    For t = 0 To UBound(b) - 1
        txt = txt + Chr(b(t))
    Next
   
    Text1.Text = getInfo("<title>", "</title>", txt)
    Command1.Enabled = True
   
    Exit Sub
End Sub
Avatar billede thesurfer Nybegynder
07. november 2004 - 14:32 #6
"Men hvad er så fordelen at bruge?": Fordelen ved selve at pille data ud, fremfor brugen af RegExp?
- Det kan fylde mindre, og jeg vil mene at man normalt bruger RegExp til mere komplicerede ting, som ellers ville kræve mange liniers kode..
Avatar billede ihtezaz Praktikant
24. oktober 2006 - 15:16 #7
Hey, hvad hvis <title> tagget har attributter på sig ?? Hvad gør man da?
Avatar billede thesurfer Nybegynder
24. oktober 2006 - 18:30 #8
- Et tag starter med "<", efterfulgt af navnet og afsluttes med ">".
- Et tag afsluttes med "</", efterfulgt af navnet på tag'et.

Derfor kan du lede efter "<title", og derefter hoppe til ">" + 1.
Selve titlen finder du fra den position, og til du finder "</"+tag'et.
Avatar billede thesurfer Nybegynder
24. oktober 2006 - 18:46 #9
Eksempel:

Function getInfo(TagName As String, Page_Source As String)
Page_Source = Mid(Page_Source, InStr(Page_Source, "<" & TagName))
Page_Source = Mid(Page_Source, InStr(Page_Source, ">") + 1)
Page_Source = Left(Page_Source, InStr(Page_Source, "<") - 1)
getInfo = Page_Source
End Function


Bruges sådan:

  Text1.Text = getInfo("title", strInput)
Avatar billede thesurfer Nybegynder
24. oktober 2006 - 18:48 #10
Rettelse:

Function getInfo(TagName As String, Page_Source As String)
Page_Source = Mid(Page_Source, InStr(Page_Source, "<" & TagName))
Page_Source = Mid(Page_Source, InStr(Page_Source, ">") + 1)
Page_Source = Left(Page_Source, InStr(Page_Source, "<") - 1)
getInfo = Page_Source
End Function


Bruges sådan:

    Dim strInput As String
    strInput = "<html><head><title test>Sidens Titel</title HelloWorld></head><body>hello world</body></html>"
  Text1.Text = getInfo("title", strInput)


- Læg mærke til "<title test>" og "</title HelloWorld>"..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester