Just nu i M3-nätverket
Gå till innehåll
FiEnD

Regular expression för att kapa långa URLer

Rekommendera Poster

FiEnD

Hej

 

Har nu suttit i tre timmar med att googla på en regular expression som som ska strippa ned en lång URL till en mer hantering länk.

 

Det jag söker är något som gör om:

 

http://www.ensida.com/enurl/ienkatalog/ochsedanblirdetmyckettext.asp?string1=xxx&string2=tjosan

 

till (exempelvis)

 

<a href="http://www.ensida.com/enurl/ienkatalog/ochsedanblirdetmyckettext.asp?string1=xxx&string2=tjosan" target="_blank">http://www.ensida.com/enurl/... string2=tjosan</a>

 

Och hur jag sedan skall skriva en

 

Hejsidan och att den första funktionen inte ska göra om denna efter den är omgjord. Som jag lyckades få till det så blev det dubbla ombyggnationer av URLen.. så det blev tillslut <a href="<a href=" osv.

 

Någon som kan hjälpa mig? :/

 

Mvh Fredrik

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
FiEnD

Det går utmärkt, men nu är det inte just URLen, utan en text med URL i =)

 

Exempeltext =

"blah blah http://www.thisisaurl.com/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/_temp/default.asp?hid=11 blah blah Orange Text blah blah Size 7 Text blah blah Arial Font blah blah

This is what BBD said.
blah blah Bold Text blah blah Underlined Text blah blah Italicized Text blah blah [li]Listed Text[/li] blah blah"

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mr Andersson

Ahh... fattade ju inte jag! :)

 

Då blir det betydligt jobbigare!

 

Hur ska resultatet bli i det exempel du visade nu?

 

 

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
FiEnD

Ibland så är man lite otydlig efter man suttit vid google och svettats i flera timmar :/

 

Såhär blev koden nu:

 

blah blah <a href="http://www.thisisaurl.com/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/:8080/_temp/default.asp?hid=11" target="_blank">http://www.thisisaurl.com/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/foobartools/:8080/_temp/default.asp?hid=11</a> blah blah <span style="color: orange;">Orange Text</span> blah blah <font size="3">Size 7 Text</font> blah blah <span style="font-family: Arial, Sans-Serif, Serif;">Arial Font</span> blah blah <div class="quote"><span style="font-weight: bold; font-size: 8pt;">BBD said:</span><pre class="quote1">This is what BBD said.</pre></div> blah blah <span style="font-weight: bold;">Bold Text</span> blah blah <span style="text-decoration: underline;">Underlined Text</span> blah blah <span style=" font-style: italic;">Italicized Text</span> blah blah <ul><li>Listed Text</li></ul> blah blah

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
FiEnD

Det är alltså URLen som jag inte lyckas få till )=

 

Har sett ett par exempel på nätet där personer frågat efter URLer som skrivs om till typ

 

http://www.minurl.com/enhemsida/.... /hej/tjosan.html

Istället för att visa allting..

URLerna blir rätt så jobbiga om man ska skriva ut dem på sidan för dem knäcker designen totalt om de blir långa =/

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mr Andersson

Nja, själva URL'en kan du inte ändra på, så klart. Det enda du kan ändra är det som visas understruket på websidan, som användaren ser.

 

Du behöver kort å gott två versioner av din text ; en med äkta, fungerande URL'er och en med "user friendly" URL'er.

 

För att göra en user-friendly URL, kan du använda mitt script. Du får nog göra det manuellt, genom att leta upp "http:" och sen hämta allting fram till första 'space' och sen köra mitt script på just den deltexten, och upprepa tills inget mer "http:" hittas.

 

Har jag fattat ungefär eller jag är inte ens på samma bana som dig?! :)

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
FiEnD

Hej

 

Jag vet inte riktigt varför, men det bör ju gå att lösa med regular expressions. Jag hade en länk ett tag som hade ett exempel som tydligen fungerade, men jag fick det inte att fungera rätt. Så då slängde jag det :/

 

Ska se om jag hittar åt det.

 

Att sitta och söka igenom texten efter ett http: känns verkligen bökig och omständigt :)

 

Ska se om jag hittar åt URLen.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mr Andersson

Jag är ingen stjärna på regexp, men jag skulle bli imponerad om det går att lösa med det! Hittar du länken, så kanske jag (eller nån annan här) kan tillföra något om du inte får det att göra som du vill!

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Anjuna Moon
, men jag skulle bli imponerad om det går att lösa med det!

Håll ut ett tag (äter pizza och tittar på nya 24) så skall jag försöka imponera med ett regexp-exempel =)

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
FiEnD

Ah.. nice med pizza :) Nu blev man lite hungrig!

 

Men jag får hålla ut..

Kanske blir lite rostade mackor senare ikväll. Tar en paus nu och spikar ihop lite CDskivor med partymusik åt en kompis :)

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mr Andersson

Jag hoppades du skulle dyka upp... :)

 

Du har gett Regexp ett ansikte.... flåt, det var inte helt schyst att säga så! :)

 

skall jag försöka imponera med ett regexp-exempel

 

Jag tittar och lär, av nån anledning imponerar du på mig då-och-då.

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mr Andersson

Vill bara säga att Anjuna har impat på mig mer än en gång på mig, med sina regexp-funktioner....

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Anjuna Moon

Tack Mr Andersson, nu ska vi se om jag lever upp till berömmet.

Jag har skapat två funktioner, en för att korta ner url:ar med mer än 27 tecken (http:// + 10 + 10) och omvandla till länkar samt en för urlar som är mindre än 28 tecken som den bara gör om direkt till länkar.

 

Funktionerna:

[color="#0000ff"]Function[/color] EncodeAndShortenUrls(strData)
[color="#0000ff"]Set[/color] regEx = [color="#0000ff"]New[/color] RegExp
regEx.Pattern = [GRÅ]"(http://[\S]{10,10})([\S]+)([\S]{10,10}\s)"[/GRÅ]
    EncodeAndShortenUrls=regEx.[color="#0000ff"]Replace[/color](strData, [GRÅ]"<a href='$1$2$3'>$1...$3</a>"[/GRÅ])
[color="#0000ff"]End[/color] [color="#0000ff"]Function[/color]
[color="#0000ff"]Function[/color] EncodeAlreadyShortUrls(strData)
[color="#0000ff"]Set[/color] regEx = [color="#0000ff"]New[/color] RegExp
regEx.Pattern = [GRÅ]"(http://[\S]{1,20}\s)"[/GRÅ]
    EncodeAlreadyShortUrls=regEx.[color="#0000ff"]Replace[/color](strData, [GRÅ]"<a href='$1'>$1</a>"[/GRÅ])
[color="#0000ff"]End[/color] [color="#0000ff"]Function[/color]

 

Testa med:

[b]Response[/b].write EncodeAlreadyShortUrls(EncodeAndShortenUrls([GRÅ]"asd asd http://www.aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.html dsf sdfs df sdf http://www.idg.se sdf sdf "[/GRÅ]))

 

EDIT: Mm, en och en halv fårostpizza gick ner, rekommenderas =)

[inlägget ändrat 2007-02-07 21:13:31 av Anjuna Moon]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
FiEnD

Okey, nu blev det något "ooops 505" - felmeddelande då jag postade så jag försöker igen.

 

Det fungerade alldeles utmärkt det där! =)

 

Det som jag dock funderar lite på nu är hur jag ska skriva om det så den INTE kodar om och gör länkar av mina ]+)\]([^\]]+)\[\/url\]

 

Gör i dagsläget om:

min hemsida till

till:

<a href="http://www.hemsida.se" target="_blank">min hemsida</a>

 

Mvh Fredrik

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Anjuna Moon

Inte säker på att jag hänger med. Menar du så här:

 

Function EncodeAndShortenUrls(strData)
Set regEx = New RegExp
regEx.Pattern = "(http://[\S]{10,10})([\S]+)([\S]{10,10}\s)"
   EncodeAndShortenUrls=regEx.Replace(strData, "[url=$1$2$3]$1...$3[/url]")
End Function
Function EncodeAlreadyShortUrls(strData)
Set regEx = New RegExp
regEx.Pattern = "(http://[\S]{1,20}\s)"
   EncodeAlreadyShortUrls=regEx.Replace(strData, "[url=$1]$1[/url]")
End Function

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
FiEnD

Njae, jag tror inte jag menade sådär =)

 

Om jag nu har en funktion som gör om alla mina länkar till <a href så blir ju mina sidan xxx också påverkade.

För då min funktion som gör om

sidan xxx till <a href= så ser den ut såhär efter att den förra funktionen varit inne och härjat:

 

sidan xxx

 

Och då blir min funktion som gör om URLer lite väl muppad så den lägger min <a href="" i en ny <a href="

 

Så det blir

 

<a href="<a href="http:// osv.

 

Förstår du? =)

 

Så om den kunde göra om alla URLer så blir det knasigt.

Vill ha både funktionalitet för att göra om URLer klickbara vid inlänkning http://www.url.se och även om man matar in det med den BB-funktionalitet som jag tänker bygga till. (håller på att utveckla ett eget forum är det tänkt).. :)

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Anjuna Moon

Du skulle ju kunna se till att den bara konverterar länkar som har ett whitespace (ex. mellanslag) före http:// för att undvika att min funktion påverkar [url=]-taggarnas innehåll. (lade även till global=true nedan)

[log]

Function EncodeAndShortenUrls(strData)
Set regEx = New RegExp
regEx.Pattern = "(\shttp://[\S]{10,10})([\S]+)([\S]{10,10}\s)"
   regEx.Global=true
   EncodeAndShortenUrls=regEx.Replace(strData, "<a href='$1$2$3'>$1...$3</a>")
End Function
Function EncodeAlreadyShortUrls(strData)
Set regEx = New RegExp
   regEx.Global=true
regEx.Pattern = "(\shttp://[\S]{1,20}\s)"
   EncodeAlreadyShortUrls=regEx.Replace(strData, "<a href='$1'>$1</a>")
End Function

[/log]

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
FiEnD

Så sant så sant! :)

 

Det funkar ju också att göra så..

Då har jag fått den hjälp jag behöver för tillfället. Ska börja bygga lite på designen nu. Det är däremot min styrka :D

 

Tack

 

Poäng utdelas givetvis =)

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Jonas__B

Anjuna kan du hjälpa mig med ungefär samma regexp, men utan de sista tecknena.

 

Alltså;

om en url är 100 tecken lång, skall det vara hela urlen i href (givetvis) men endast visa säg, 40 tecken av urlen samt &hellip;

 

Tack på förhand.

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Anjuna Moon
om en url är 100 tecken lång, skall det vara hela urlen i href (givetvis) men endast visa säg, 40 tecken av urlen samt &hellip;

Imorgon ok, fast jag är ganska säker på att du kan anpassa det regexp:et om du vill ;)

Ledtrådar:

{ a , b } -> Minst a och högst b antal tecken

{ a , } -> Minst a tecken

{a } -> Exakt a antal

 

Jag tror du fixar det själv Jonas_Bo. Om inte direkt så kom ihåg att den problemlösning man står inför med reguljära uttryck är väldigt lik den man stod inför när man löste saker i assembler på 80-talet. Det är en problemlösningsprocess som är väldigt logisk när man bryter ned den i delar. Detta är en väldigt nyttig övning för folk som inte lärt sig programmera på låg nivå (a k a på riktigt ;), ta det som en utmaning. Tro mig, det kan vara irriterande och tidsödande i början, men i längden kommer du vinna på det.

 

Alla språk du någonsin kommer använda är uppbyggda av reguljära uttryck (inte begränsat till programmeringsspråk, gäller de flesta talade språk också) så grunden i all förståelse av programmering och språk ligger i en ganska flytande regex-mentalitet (ok, tack och lov pratar ingen esperanto idag, men ändå =)

 

Om du inte löser det så återkommer jag imorgon som sagt...

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Jonas__B

Jag har redan löst det mesta.

Det med minst och max visste jag (faktiskt ; )

 

Problemet är nu med &hellip; - att det skall visas endast om urlen nerkortas.

 

- "Jag är inte dum -- Jag har bara lite otur när jag tänker"

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Jonas__B

Nej jag har inte lyckats lösa det riktigt

 

 

 

function create_links(strText)
strText = " " & strText

strText = ereg_replace(strText, "(http://[\S]{6,50})([\S]+)", "<a href=""$1$2"">$1&hellip;</a>")
strText = ereg_replace(strText, "([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)", "<a href=""mailto:$1@$2"">$1@$2</a>")
strText = right(strText, len(strText)-1)
create_links = strText
end function

function ereg_replace(strOriginalString, strPattern, strReplacement)
' Function replaces pattern with replacement
dim objRegExp : set objRegExp = new RegExp
objRegExp.Pattern = strPattern
objRegExp.IgnoreCase = True
objRegExp.Global = True
ereg_replace = objRegExp.replace(strOriginalString, strReplacement)
set objRegExp = nothing
end function

 

Jag förstår att så detta gör att &hellip visas hela tiden, men jag vet inte hur jag skall göra för att lösa det så det inte gör det om antalet tecken i urlen understiger 50.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...