/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
[OT?] RegExp der matcher links?
Fra : Thomas Voller


Dato : 31-03-04 19:20

Hej NG.


Jeg har en ASP-funktion, der vha. et regulært udtryk gennemsøger en given
tekst efter links. Det udtryk ser sådan ud:

objRegExp.Pattern = "\b(www|http|\S+@)\S+\b"

Det virker.. Næsten. For hvis der i teksten der gennemsøges findes et link
med en skråstreg til sidst, så bliver denne skråstreg ikke inkluderet i
resultatet. Hvis der f.eks. i teksten findes følgende udtryk:

http://voller.dk/

Så matcher det regulære udtryk kun http://voller.dk, altså uden skråstregen
til sidst. Kan mit regulære udtryk modificeres, sådan at en eventuel
skråstreg i slutningen af et link bliver inkluderet i søgningen med
RegExp-objektet?

Beklager, at emnet er tilnærmelsesvist off-topic, men jeg kunne ikke finde
en mere velegnet gruppe.


Mvh. Thomas.



 
 
Jakob Andersen (31-03-2004)
Kommentar
Fra : Jakob Andersen


Dato : 31-03-04 19:55

Thomas Voller wrote:
> Jeg har en ASP-funktion, der vha. et regulært udtryk gennemsøger en
> given tekst efter links. Det udtryk ser sådan ud:
>
> objRegExp.Pattern = "\b(www|http|\S+@)\S+\b"

Hvis du blot vil tjekke om der er _en eller ingen_ skråstreg i slutningen
kan du vel blot bruge /? som i nedenstående:

\b(www|http|S+@)\S+/?\b

--
Jakob Andersen



Thomas Voller (31-03-2004)
Kommentar
Fra : Thomas Voller


Dato : 31-03-04 20:04

"Jakob Andersen" <jakob@intellect.invalid> skrev
> Hvis du blot vil tjekke om der er _en eller ingen_ skråstreg i slutningen
> kan du vel blot bruge /? som i nedenstående:
> \b(www|http|S+@)\S+/?\b


Det ser ikke sådan ud. Jeg prøvede lige at teste dit eksempel, men den
sidste skråstreg blev ikke taget med i match'et fra RegExp-søgningen.

Sagen er, at jeg har lavet en funktion, der gennemsøger en tekst efter
links. De fundne links skal så gøres klikbare. F.eks. på sådan en måde, at
teksten...

http://www.voller.dk/

bliver erstattet med...

<a href="http://www.voller.dk/">Link

Det at gøre linket klikbart har jeg klaret. Jeg kan bare ikke få en
eventuelt afsluttende skråstreg med ind i linket. Lige nu bliver resultatet
af min funktion som sådan:

<a href="http://www.voller.dk">Link/

Og når det bliver udskrevet i en browser bliver det jo til...

Link/

Og det ser jo ikke så fikst ud. Hvis jeg ikke har en afsluttende skråstreg i
linket, så virker funktionen upåklageligt.



Mvh. Thomas.



Jakob Andersen (31-03-2004)
Kommentar
Fra : Jakob Andersen


Dato : 31-03-04 20:53

Thomas Voller wrote:
> Det ser ikke sådan ud. Jeg prøvede lige at teste dit eksempel, men den
> sidste skråstreg blev ikke taget med i match'et fra RegExp-søgningen.

Okay, nu har jeg ikke lige leget med RegEx i VBScript i lang tid, men jeg
tror det er dine boundaries det er galt med.

Jeg lavede lige en lille clientside test i IE, og da det er samme fortolker
må vi jo stole på det, udskift din boundaries med whitespaces og så virker
det. Dog skal du lige være opmærksom på at du så ikke matcher links i
starten og slutningen af din streng men en grumt hack kunne jo være noget
ala:

objRegEx.Pattern = "\s(http|www|\S+@)\S+/?\s"
Set Matches = objRegEx.Execute(" " & strInput & " ")


--
Jakob Andersen



Jørgen Müller (01-04-2004)
Kommentar
Fra : Jørgen Müller


Dato : 01-04-04 16:20

Thomas Voller skrev:
>Jeg har en ASP-funktion, der vha. et regulært udtryk gennemsøger en given
>tekst efter links. Det udtryk ser sådan ud:

> objRegExp.Pattern = "\b(www|http|\S+@)\S+\b"

Ved ikke om du kan bruge det til noget, men nedenstående script
har jeg hentet på nettet og bruger på min hjemmeside.
Han bruger objRegExp.Pattern = "\b(www|http|\S+@)\S+\b" ' Match URLs and
emails
Men har vedlagt hele scriptet, håber det er i orden.

Function InsertHyperlinks(inText)
Dim objRegExp, strBuf
Dim objMatches, objMatch
Dim Value, ReplaceValue, iStart, iEnd

strBuf = ""
iStart = 1
iEnd = 1
Set objRegExp = New RegExp

objRegExp.Pattern = "\b(www|http|\S+@)\S+\b" ' Match URLs and emails
objRegExp.IgnoreCase = True
' Set caseinsensitivity.
objRegExp.Global = True
' Set global applicability.
Set objMatches = objRegExp.Execute(inText)
For Each objMatch in objMatches
iEnd = objMatch.FirstIndex
strBuf = strBuf & Mid(inText, iStart, iEnd-iStart+1)

If InStr(1, objMatch.Value, "@") Then
strBuf = strBuf & GetHref(objMatch.Value, "EMAIL", "_BLANK")
Else
If Right(objMatch.Value,1) = "r" Then
i = InStr(1, objMatch.Value, "<")
strBuf = strBuf & GetHref(Left(objMatch.Value,i -1), "WEB", "_BLANK")
Else
strBuf = strBuf & GetHref(objMatch.Value, "WEB", "_BLANK")
End If
End If
iStart = iEnd+objMatch.Length+2
Next
strBuf = strBuf & Mid(inText, iStart)
InsertHyperlinks = strBuf
End Function


Function GetHref(url, urlType, Target)
Dim strBuf

strBuf = "<a href="""
If UCase(urlType) = "WEB" Then
If LCase(Left(url, 3)) = "www" Then
strBuf = "<a href=""http://" & url & """ target=""" & _
Target & """>" & url & "&nbsp;</a>"
Else
strBuf = "<a href=""" & url & """ target=""" & _
Target & """>" & url & "&nbsp;</a>"
End If
ElseIf UCase(urlType) = "EMAIL" Then
strBuf = "<a href=""mailto:" & url & """>" & url & "</a>"
End If

GetHref = strBuf

End Function

--
Med Venlig Hilsen
Jørgen Müller



Torben Brandt (01-04-2004)
Kommentar
Fra : Torben Brandt


Dato : 01-04-04 19:36

Thomas Voller skrev:
> Jeg har en ASP-funktion, der vha. et regulært udtryk gennemsøger en given
> tekst efter links. Det udtryk ser sådan ud:
>
> objRegExp.Pattern = "\b(www|http|\S+@)\S+\b"
>
> Det virker.. Næsten. For hvis der i teksten der gennemsøges findes et link
> med en skråstreg til sidst, så bliver denne skråstreg ikke inkluderet i
> resultatet. Hvis der f.eks. i teksten findes følgende udtryk:
>
> http://voller.dk/
>
> Så matcher det regulære udtryk kun http://voller.dk, altså uden skråstregen
> til sidst. Kan mit regulære udtryk modificeres, sådan at en eventuel
> skråstreg i slutningen af et link bliver inkluderet i søgningen med
> RegExp-objektet?

Jeg har tidligere været med at finde på denne: [1]
[Beklager at linierne er for lange til ikke at blive ombrudt, men kopier
det over i en notepad]
oRegEx.Pattern =
"(((http|https|ftp):\/\/)?[\wæøåÆØÅ\.\-]+\.[A-Za-z]{1,5}(\/[\w\.\/\-]*(\?\S*)?)?)"
' protokol ------^^^^^^^^^^^^^^^^^^^^^^^^^
' domæne ---------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
' muligvis noget efter domænet
-----------------------------------------^----------------------^^
' mulige undermapper og filnavn (indledes med / hvis der er noget)
------^^^^^^^^^^^^^
' mulig querystring (indledes med ? hvis der er noget)
-------------------------------^^^^^^^^^

Jeg tillader æøå i domæner (ikke TLD) og TLD kan være fra 1 til 5
bogstaver. Bemærk også at der kan være bindestreg og punktum i domænet,
og \w matcher ikke disse to tegn.

Det sværeste ved ovenstående er at finde ud af hvornår man skal slutte,
for ofte skrives querystringen ikke urlencoded og kan derfor indeholde
alle tegn. Jeg har sagt at første gang man kommer til tegnene i \s så
stopper vi, det er primært mellemrum, linieskift og tabulatorer.

[1]
<URL:http://groups.google.dk/groups?hl=da&lr=&ie=UTF-8&oe=UTF-8&selm=3F3C0C18.5030201%40domain.invalid>

mvh Torben


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste