Avatar billede axkris Nybegynder
29. februar 2004 - 23:45 Der er 26 kommentarer og
1 løsning

Script der finder domænenavn

Hej

Jeg har en streng med værdien:

id=listlinks href="http://www.DETTE_SKAL_JEG_BRUGE.dk/" target=_scurl>

Og så skal jeg bruge et reg.exp-script, som finder domænetnavnet, som er mellem "id=listlinks href="http://" og det sidste punktum.

Altså så outputtet bliver "DETTE_SKAL_JEG_BRUGE"

Kan du hjælpe mig?

(PS. Nogle af mine adresser anvender ikke "www." og det skal der også tages højde for. Ligeledes er de forskellige landekoder.)

Scriptet skal være skrevet i asp (vbscript)
Avatar billede ellebaek Nybegynder
01. marts 2004 - 10:58 #1
<%
Function LinkToString(strInput)
Set objRegExpHTTP1 = New RegExp
objRegExpHTTP1.Global = True
objRegExpHTTP1.IgnoreCase = True
       
objRegExpHTTP1.Pattern = "(href=""http://)(www.)(.*?)(.)(.*?)"
strOutput = objRegExpHTTP1.Replace(strInput, "$3")

objRegExpHTTP1.Pattern = "(href=""http://)(.*?)(.)(.*?)"
strOutput = objRegExpHTTP1.Replace(strOutput, "$2")


set objRegExpHTTP1 = Nothing
LinkToString = strOutput
End Function

response.write LinkToString(tekst)
%>

Måske virker dette... Jeg har ikke testet det.
Avatar billede axkris Nybegynder
01. marts 2004 - 16:53 #2
Takker, men den siger følgende ved pattern-linien:

Expected end of statement


    Set objRegExpHTTP1 = New RegExp
    objRegExpHTTP1.Global = True
    objRegExpHTTP1.IgnoreCase = True
       
    objRegExpHTTP1.Pattern = "(href=""www.)(.*?)(.)(.*?)" target="_blank">http://)(www.)(.*?)(.)(.*?)"
    strOutput = objRegExpHTTP1.Replace(strInput, "$3")

    objRegExpHTTP1.Pattern = "(href=""http://)(.*?)(.)(.*?)"
    strOutput = objRegExpHTTP1.Replace(strOutput, "$2")

    set objRegExpHTTP1 = Nothing
    LinkToString = strOutput
   
    response.write LinkToString

Ud over det skal alle de fundne links smides ind i et array på hver sin plads. Kan du indbygge det? :)
Avatar billede ellebaek Nybegynder
02. marts 2004 - 14:37 #3
Jeg havde fået lavet en fejl i den oprindelige funktion som jeg skrev til dig, havde byttet lidt om på nogen linier... Prøv denne, det burde virke. Den returnere kun domænenavnet, ikke hverken tekst eller noget link til det...
<%
Function LinkToString(strInput)
Set objRegExpHTTP1 = New RegExp
objRegExpHTTP1.Global = True
objRegExpHTTP1.IgnoreCase = True
       
objRegExpHTTP1.Pattern = "(.*?)(href=""www.)(.*?)(.)(.*?)"
strOutput = objRegExpHTTP1.Replace(strInput, "$3")

objRegExpHTTP1.Pattern = "(.*?)(href=""http://)(.*?)(.)(.*?)"
strOutput = objRegExpHTTP1.Replace(strOutput, "$3")

set objRegExpHTTP1 = Nothing
LinkToString = strOutput
End Function

response.write LinkToString(tekst)
%>



Funktion med tilknytning til array, jeg har ikke testet den, men jeg er ikke sikker på det kan lade sig gøre på den måde, men prøv det engang.
<%
dim myarr()

Function LinkToString(strInput)
i = 0
Set objRegExpHTTP1 = New RegExp
objRegExpHTTP1.Global = True
objRegExpHTTP1.IgnoreCase = True
       
objRegExpHTTP1.Pattern = "(.*?)(href=""www.)(.*?)(.)(.*?)"
strOutput = objRegExpHTTP1.Replace(strInput, "$3")

objRegExpHTTP1.Pattern = "(.*?)(href=""http://)(.*?)(.)(.*?)"
strOutput = objRegExpHTTP1.Replace(strOutput, "$3")
myarr(i) = "$3"
i = i+1

set objRegExpHTTP1 = Nothing
LinkToString = strOutput
End Function

response.write LinkToString(tekst)
%>
Avatar billede axkris Nybegynder
02. marts 2004 - 16:17 #4
Takker, men skal der ikke være en while-løkke også... jeg tænker på, at der jo findes mange links i strengen, som der skal findes domænenavnet på. Altså at den kører hele strengen igennem indtil der ikke er links (domænenavne) i den. Kan du hjælpe mig lidt her? :)
Avatar billede ellebaek Nybegynder
02. marts 2004 - 16:21 #5
Fordelen ved regexp er at du ikke skal benytte whileløkker for at få den til at replace igennem hele strengen, derfor tror jeg ikke du kan lave et trick den vej med at smide elementerne ned i et array.
Avatar billede axkris Nybegynder
02. marts 2004 - 21:09 #6
Jeg skulle gerne have smidt alle forekomsterne ind i et array på en gang, og derfor har jeg følgende kode, som desværre ikke udskriver noget.

    dim arrTitler()
   
    Set objRegExpHTTP1 = New RegExp
    objRegExpHTTP1.Global = True
    objRegExpHTTP1.IgnoreCase = True
       
    objRegExpHTTP1.Pattern = "(.*?)(href=""www.)(.*?)(.)(.*?)"
    strOutput = objRegExpHTTP1.Replace(strRetval, "$3")

    objRegExpHTTP1.Pattern = "(.*?)(href=""http://)(.*?)(.)(.*?)"
    Set match = objRegExpHTTP1.Execute(strOutput)

    i = 0
   
    For Each strTitle In match
          arrTitler(u) = trim(objRegExpHTTP1.Replace(strTitle, "$3"))
          response.write arrTitler(u) & "*<br>"
          i = i + 1
    Next
Avatar billede ellebaek Nybegynder
03. marts 2004 - 09:27 #7
dim arrTitler()
   
    Set objRegExpHTTP1 = New RegExp
    objRegExpHTTP1.Global = True
    objRegExpHTTP1.IgnoreCase = True
       
    objRegExpHTTP1.Pattern = "(.*?)(href=""www.)(.*?)(.)(.*?)"
    strOutput = objRegExpHTTP1.Replace(strRetval, "$3")

    objRegExpHTTP1.Pattern = "(.*?)(href=""http://)(.*?)(.)(.*?)"
    Set match = objRegExpHTTP1.Execute(strOutput)

    i = 0
   
    For Each strTitle In match
          arrTitler(i) = trim(objRegExpHTTP1.Replace(strTitle, "$3"))
          response.write arrTitler(i) & "*<br>"
          i = i + 1
    Next

Skulle der ikke stå i i stedet for u ?
Avatar billede axkris Nybegynder
03. marts 2004 - 10:32 #8
Sorry, jeg kom til at skrive forkert tæller, men det funger alligevel ikke.

Prøv at køre følge på din egen pc og den udskriver intet:

    strRetval = "id=listlinks href=""http://www.DETTE_SKAL_JEG_BRUGE.dk/"" target=_scurl>    id=listlinks href=""http://DETTE_SKAL_JEG_OGSÅ_BRUGE.com/"" target=_scurl>"
   
    dim arrTitler()
   
    Set objRegExpHTTP1 = New RegExp
    objRegExpHTTP1.Global = True
    objRegExpHTTP1.IgnoreCase = True
       
    objRegExpHTTP1.Pattern = "(.*?)(href=""www.)(.*?)(.)(.*?)"
    strOutput = objRegExpHTTP1.Replace(strRetval, "$3")

    objRegExpHTTP1.Pattern = "(.*?)(href=""http://)(.*?)(.)(.*?)"
    Set match = objRegExpHTTP1.Execute(strOutput)

    i = 0
   
    For Each strTitle In match
          arrTitler(i) = trim(objRegExpHTTP1.Replace(strTitle, "$3"))
          response.write arrTitler(i) & "*<br>"
          i = i + 1
    Next
   
    set objRegExpHTTP1 = Nothing
Avatar billede ellebaek Nybegynder
03. marts 2004 - 10:39 #9
har du prøvet denne ?

<%
dim myarr()

Function LinkToString(strInput)
i = 0
Set objRegExpHTTP1 = New RegExp
objRegExpHTTP1.Global = True
objRegExpHTTP1.IgnoreCase = True
       
objRegExpHTTP1.Pattern = "(.*?)(href=""www.)(.*?)(.)(.*?)"
strOutput = objRegExpHTTP1.Replace(strInput, "$3")

objRegExpHTTP1.Pattern = "(.*?)(href=""http://)(.*?)(.)(.*?)"
strOutput = objRegExpHTTP1.Replace(strOutput, "$3")
myarr(i) = "$3"
i = i+1

set objRegExpHTTP1 = Nothing
LinkToString = strOutput
End Function

response.write LinkToString(tekst)
%>
Avatar billede axkris Nybegynder
03. marts 2004 - 10:49 #10
Ja, men den skal - som allerede beskrevet - fylde finde alle forekomster på en gang og smide dem ind i et array til senere brug.

<%
dim myarr(10)

tekst = "id=listlinks href=""http://www.DETTE_SKAL_JEG_BRUGE.dk/"" target=_scurl>    id=listlinks href=""http://www.DETTE_SKAL_JEG_OGSÅ_BRUGE.com/"" target=_scurl>"


Function LinkToString(strInput)
i = 0
Set objRegExpHTTP1 = New RegExp
objRegExpHTTP1.Global = True
objRegExpHTTP1.IgnoreCase = True
       
objRegExpHTTP1.Pattern = "(.*?)(href=""www.)(.*?)(.)(.*?)"
strOutput = objRegExpHTTP1.Replace(strInput, "$3")

objRegExpHTTP1.Pattern = "(.*?)(href=""http://)(.*?)(.)(.*?)"
strOutput = objRegExpHTTP1.Replace(strOutput, "$3")
myarr(i) = "$3"
i = i+1

set objRegExpHTTP1 = Nothing
LinkToString = strOutput
End Function

response.write LinkToString(tekst)
%>

Den eneste som den udskriver er:

ww.DETTE_SKAL_JEG_OGSÅ_BRUGE.dk/" target=_scurl>

Og den burde udskrive:
"DETTE_SKAL_JEG_BRUGE" samt "DETTE_SKAL_JEG_OGSÅ_BRUGE"
Avatar billede axkris Nybegynder
03. marts 2004 - 10:52 #11
fylde finde = finde
Avatar billede ellebaek Nybegynder
03. marts 2004 - 19:23 #12
<%

tekst = "id=listlinks href=""http://www.DETTE_SKAL_JEG_BRUGE.dk/"" target=_scurl>    id=listlinks href=""http://www.DETTE_SKAL_JEG_OGSÅ_BRUGE.com/"" target=_scurl>"


Function LinkToString(strInput)

Set objRegExpHTTP1 = New RegExp
objRegExpHTTP1.Global = True
objRegExpHTTP1.IgnoreCase = True
       
objRegExpHTTP1.Pattern = "(.*?)(href=""www.)(.*?).(.*?)"
strOutput = objRegExpHTTP1.Replace(strInput, "$3")

objRegExpHTTP1.Pattern = "(.*?)(href=""http://)(.*?).(.*?)"
strOutput = objRegExpHTTP1.Replace(strOutput, "$3")

set objRegExpHTTP1 = Nothing
LinkToString = strOutput
End Function

response.write LinkToString(tekst)
%>

prøv lige denne, hvad den udskriver.
Avatar billede axkris Nybegynder
03. marts 2004 - 19:35 #13
Det samme:

ww.DETTE_SKAL_JEG_OGSÅ_BRUGE.com/" target=_scurl>
Avatar billede axkris Nybegynder
04. marts 2004 - 12:50 #14
Venter stadig meget spændt :)
Avatar billede ellebaek Nybegynder
04. marts 2004 - 12:54 #15
jeg er lige ved at teste nogle ting... Vender tilbage!
Avatar billede axkris Nybegynder
04. marts 2004 - 12:56 #16
Du kan jo selv uden videre teste det på din egen pc... der kræves jo intet andet end en asp-server ;) ... ingen specielle moduler mv
Avatar billede ellebaek Nybegynder
04. marts 2004 - 13:12 #17
Nej, nemlig... så det var lige det jeg gjorde...

Dette fungere med den streng du skrev før..

<%

tekst = "id=listlinks href=""http://www.DETTE_SKAL_JEG_BRUGE.dk/"" target=_scurl>    id=listlinks href=""http://www.DETTE_SKAL_JEG_OGSÅ_BRUGE.com/"" target=_scurl>"


Function LinkToString(strInput)

Set objRegExpHTTP1 = New RegExp
objRegExpHTTP1.Global = True
objRegExpHTTP1.IgnoreCase = True

objRegExpHTTP1.Pattern = "(.*?)(www.)(.*?)(\.)(.*?)(>)"
strOutput = objRegExpHTTP1.Replace(strInput, "$3<br>")

set objRegExpHTTP1 = Nothing
LinkToString = strOutput
End Function
response.write LinkToString(tekst)
%>
Avatar billede axkris Nybegynder
04. marts 2004 - 19:18 #18
Super, det virker, men jeg vil meget, meget gerne have outputtet ind i et array, da jeg først skal bruge det senere. Kan du ikke hjælpe mig? :)
Avatar billede ellebaek Nybegynder
04. marts 2004 - 20:15 #19
Succes...

Det blev en smule mere omstændigt end den funktion jeg gav dig før..
Men det kommer alt i alt til at se ud som dette:

<%
dim myarr(10)
tekst = "id=listlinks href=""http://www.DETTE_SKAL_JEG_BRUGE.dk/"" target=_scurl>    id=listlinks href=""http://www.DETTE_SKAL_JEG_OGSÅ_BRUGE.com/"" target=_scurl>"

i = 0

Function LinkToString(strInput)

Set objRegExpHTTP1 = New RegExp
objRegExpHTTP1.Global = True
objRegExpHTTP1.IgnoreCase = True

objRegExpHTTP1.Pattern = "(.*?)(www.)(.*?)(\.)(.*?)(>)"
strOutput = objRegExpHTTP1.Replace(strInput, "$3")

set objRegExpHTTP1 = Nothing
LinkToString = strOutput
End Function

Set objRegExp = New RegExp
objRegExp.Global = True
objRegExp.IgnoreCase = True

objRegExp.Pattern = "(.*?)(www.)(.*?)(\.)(.*?)(>)"
set matches = objRegExp.Execute(tekst)

for each match in matches
myarr(i) = LinkToString(match.value)
i = i+1
next

set objRegExp = Nothing
for i = 0 to UBound(myarr)
response.write myarr(i) & "<br>"
next
%>

Selve scriptet kaldes fra denne linie: set matches = objRegExp.Execute(tekst)
Så skal du selv rette variabelnavnet til, der nu er tekst.
Avatar billede axkris Nybegynder
04. marts 2004 - 20:58 #20
Oh, yes. Så kom gennembrudet :)

Dog har jeg mange links i min streng (viste kun to til dig), så jeg håber, at du lige vil ændre lidt, så den kun finder de relevante links, som har formen:

id=listlinks href="http://www.DETTE_SKAL_JEG_BRUGE.dk/" target=_scurl>

Så hvis du kan få den til kun at vælge de link, som starter med:
id=listlinks href=

og slutter med:
target=_scurl>

Så vil jeg blive glad :)
Avatar billede axkris Nybegynder
05. marts 2004 - 11:07 #21
Jeg smider gerne ekstra points oveni, hvis det kan hjælpe lidt ;)
Avatar billede ellebaek Nybegynder
05. marts 2004 - 22:41 #22
<%
dim myarr(10)
tekst = "id=listlinks href=""http://www.DETTE_SKAL_JEG_BRUGE.dk/"" target=_scurl>    id=listlinks href=""http://www.DETTE_SKAL_JEG_OGSÅ_BRUGE.com/"" target=_scurl> www.swim.dk"

i = 0

Function LinkToString(strInput)

Set objRegExpHTTP1 = New RegExp
objRegExpHTTP1.Global = True
objRegExpHTTP1.IgnoreCase = True

objRegExpHTTP1.Pattern = "(.*?)(www.)(.*?)(\.)(.*?)(>)"
strOutput = objRegExpHTTP1.Replace(strInput, "$3")

set objRegExpHTTP1 = Nothing
LinkToString = strOutput
End Function

Set objRegExp = New RegExp
objRegExp.Global = True
objRegExp.IgnoreCase = True

objRegExp.Pattern = "(.*?)(id=listlinks href=""http://www.)(.*?)(\.)(.*?)(target=_scurl>)"
set matches = objRegExp.Execute(tekst)

for each match in matches
myarr(i) = LinkToString(match.value)
i = i+1
next

set objRegExp = Nothing
for i = 0 to UBound(myarr)
response.write myarr(i) & "<br>"
next
%>

Det her virker..
Dog er der lidt uoverensstemmelse med " omkring dit link... Det er vigtigt at du benytter 2x" for at den kan finde ud af det... Det kan du evt. gøre ved at køre strengen igennem med:
tekst = replace(tekst,""","""")
i det eks jeg har lavet har jeg antaget at du har "" på begge sider af linket.
Avatar billede axkris Nybegynder
06. marts 2004 - 16:29 #23
[hvorfor fa..... kan jeg ikke smide flere points oveni....]
Avatar billede axkris Nybegynder
06. marts 2004 - 16:33 #24
Hov, eksperten åd min kommentar, hvori jeg skrev noget ala:

Det var bare for at kunne smide linkene det ind i streng, at jeg indsatte de dobbelte gåseøjn. Nu hvor der virker i eksemplet, så skal jeg have kørt det over i den virkelig verden ;) og der er det kun et sæt gåseøjn.

Kan du hjælpe mig? (Uden replace mv ;))
Avatar billede ellebaek Nybegynder
06. marts 2004 - 18:08 #25
hvad mener du ?
Avatar billede axkris Nybegynder
07. marts 2004 - 23:23 #26
Jeg forsøgte at få den til at lede efter en url med kun en aprostrof (det var kun i mit test-eksempel at jeg var nødt til at lave to aprostroffer), men den melder fejl, når jeg fjerner den ene aprostrof:

objRegExp.Pattern = "(.*?)(id=listlinks href="http://www.)(.*?)(\.)(.*?)(target=_scurl>)"

Kan du hjælpe mig med at ændre i ovenstående kode?
Avatar billede ellebaek Nybegynder
07. marts 2004 - 23:50 #27
du bliver nødt til at have 2x" på for eller fortolker serveren det der kommer efter en enkelt som asp-kode...
Så du bliver nødt til at lave..

replace(strText,""","""")
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