Panelen



Forumnavigering
Senast inloggade
RSS
Sponsorer

Forum > ASP > Generella frågor

RegExp - Dela upp länk till lista

Roosweb
Roosweb

Gradering

#19254

Hej!

RegExp är något som verkligen inte är min starka sida så, jag har lite problem med hur jag ska lyckas bygga följande:
Jag har en textarea i ett formulär, i denna så läggs 3 länkar till, de ser ut t.ex. som:

Sommar - En härlig årstid
Vinter - Kallt och snöigt
Vår - Naturen vaknar igen


Det jag vill göra efter att jag skickat in detta i databasen är att när jag skriver ut detta igen vill jag ta bort <a href=""></a> länken som omger texten, samt dela texten i två delar, alltså Sommar sedan En härlig årstid. Dessutom vill jag göra så att en numrering läggs till på varje rad. Så slutresultatet jag vill ha när jag skriver ut är alltså:

ID#                 Ämne                   Titel

1                Sommar             En härlig årstid

Hur ska jag gå tillväga för att lyckas med detta? Är som sagt riktigt dålig på RegExp.

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
Taggar: regexp,
Redigerades av Roosweb den 29 januari 2010. Läs tidigare inlägg.
Redigerades av Roosweb den 29 januari 2010. Läs tidigare inlägg.
Redigerades av Roosweb den 29 januari 2010. Läs tidigare inlägg.
ID: #19254 | Skapades: 2010-01-29 16:18:04 | Tråden har 15 svar och har lästs 380 gånger.

voigtan
voigtan

Gradering

#19255

Vad innehåller textarean exakt? Vad vill du göra?

1. Du har en text som ser ut hur?

2. Vad skall ändras ifrån texten?

Är det en split på "-" du är ut efter, efter att du har tagit bort a-elementet?

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #19255 | Skapades: 2010-01-29 17:45:31

Roosweb
Roosweb

Gradering

#19256

1. Textarean är en helt vanlig sådan, vi kan för den delen helt bortse ifrån den, det är informationen i databasen jag vill förändra.

2. Texten i databasen kan för 1 och samma post t.ex. se ut som följande <a href="http://www.sidan.se">Sommar - En härlig årstid</a><a href="http://www.sidan.se">Vinter - Kallt och snöigt</a><a href="http://www.sidan.se">Vår - Naturen vaknar igen</a>

Det jag då vill göra är att först ta bort a-elementet helt från texten så att den istället blir Sommar En härlig årstid, efter det vill jag ställa upp texten i en numrerad lista, så att slutformateringen på texten blir som exemplet jag gjorde i min första post.

3. Jag antar det är vad jag vill, för jag vill om möjligt helt ta bort "-" och istället göra ett mellanrum på ett par hundra pixlar.

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
ID: #19256 | Skapades: 2010-01-29 18:54:05

voigtan
voigtan

Gradering

#19257

RegExp mönstret för a-elementen: <a[^>]*>([\s\S]*?)</a> och kör en replace med $1 för att ut det som står mellan a taggen. Kan Sommar och Vinter finnas med i samma text?

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #19257 | Skapades: 2010-01-29 19:11:19

Roosweb
Roosweb

Gradering

#19258

Menar du att de kan dyka upp i samma text? I sådana fall ja, och "Sommar" eller "Vinter" osv kan dessutom dyka upp flera gånger då det är ämnet i en post.

Ber om ursäkt, men jag förstår faktiskt noll av vad jag ska göra, som sagt den RegExp jag en gång kunde har jag sedan länge glömt av.

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
ID: #19258 | Skapades: 2010-01-29 21:11:57

voigtan
voigtan

Gradering

#19259

Jag måste vara trög, men vad är det du vill göra?

<a href="http://www.sidan.se">Sommar - En härlig årstid</a> <a href="http://www.sidan.se">Vinter - Kallt och snöigt</a> <a href="http://www.sidan.se">Vår - Naturen vaknar igen</a>
skall bli:

Sommar - En härlig årstid Vinter - Kallt och snöigt Vår - Naturen vaknar igen
Notera att det inte är något mellanslag på länkarna?

Sen skall du göra något där? Är det alltid Sommar, Vinter, Vår och höst den kommer reagera på eller är det ett ORD framför "-" eller kan det vara meningar? Är det radbrytningar per "a-element" nu?

Dim myRegExp, ResultString
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = "<a[^>]*>([\s\S]*?)</a>"
ResultString = myRegExp.Replace(SubjectString, "$1")
Har för mig att du har använd många färdiga regexp uttryck tidigare så jag tog det för givet att du hade något mönster kvar.

Det är jätte många frågetecken för att man skall kunna ge dig ett mer korrekt svar.

Om det alltid är en struktur liknande att det är länkens text värde du vill ha:

<a href="....">hur är det</a> - Ett ord
Så är mitt uttryck ovan felaktigt, då behöver man veta vad skall man hitta "grupperna"?

Citat:

ID#                 Ämne                   Titel

1                Sommar             En härlig årstid

Jag kanske ha missförstått detta men jag tog det för givet att detta var poster i en databas?

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #19259 | Skapades: 2010-01-29 21:29:33

Roosweb
Roosweb

Gradering

#19260

Okej jag ska försöka förtydliga det hela lite mera:

1. Man kommer in på en sida, en användare klistrar in en härva med länkar som kan se ut i princip hur som helst, det enda alla har gemensamt är <a href="länk">MENING HÄR - MENING HÄR</a> "<a href="länken">" vill jag ta bort, likaså "</a>".

2. Då har jag MENING HÄR - MENING HÄR kvar, då vill jag ta bort "-" samt lägga till kanske fem st. "&nbsp;" istället, så att Resultatet som skrivs ut blir MENING HÄR      MENING HÄR.

3. Detta ska göras med alla länkar i inlägget, jag vill avsluta med att sätta alla i en numrerad lista så att slutresultatet blir:

#1 MENING HÄR      MENING HÄR.
#2 MENING HÄR      MENING HÄR.
#3 MENING HÄR      MENING HÄR.
#24 MENING HÄR      MENING HÄR.

OSV.

4. Strukturen kommer alltid från början när det postas från min textarea in i databasen att vara:
<a href="länken">ORD - ORD</a><a href="länken">ORD - ORD</a><a href="länken">ORD - ORD</a>
<a href="länken">ORD - ORD</a><a href="länken">ORD - ORD</a><a href="länken">ORD - ORD</a> Osv.

Hoppas det förklarar lite tydligare vad jag är ute efter! :)

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
ID: #19260 | Skapades: 2010-01-29 22:06:10

voigtan
voigtan

Gradering

#19263

Forfarande inte riktigt vad jag hade behövt för att ge ett korrekt svar, "Mening här" kan dessa innehålla "-" också? Det bli extremt mycket jobb för att försöka lista ut vad som är vad, men du få funktionen av den spec du har gett mig just nu:

<%
Function RenderLinkList(sValue)
    Dim myRegExp, myMatches, myMatch
    Set myRegExp = New RegExp
    myRegExp.IgnoreCase = True
    myRegExp.Global = True
    myRegExp.Pattern = "<a[^>]*>([\s\S]*?-[\s\S]*?)</a>"
    Set myMatches = myRegExp.Execute(sValue)
    Set myRegExp = Nothing
    dim i, splitValue, sReturnValue
    For Each myMatch In myMatches
        i = i + 1
        splitValue = split(myMatch.SubMatches(0))
        sReturnValue = sReturnValue & "#" & i & "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" & splitValue(0) & "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" & splitValue(1) & "<br />"
    Next
    Set myMatches = Nothing
    RenderLinkList = sReturnValue
End Function


str =" <a href=""länk"">MENING HÄR - MENING HÄR</a> <a href=""länk"">MENING HÄR - MENING HÄR</a> <a href=""länk"">MENING HÄR - MENING HÄR</a>"

Response.Write RenderLinkList(str)


%>

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #19263 | Skapades: 2010-01-30 08:14:05

Roosweb
Roosweb

Gradering

#19264

Wow, tack voigtan för du lägger ned så mycket tid på detta! Funktionen är nästan som jag vill att den ska vara, dock är det ett litet problem till, det som skrivs ut nu ser exakt ut som jag vill ha det, förutom en liten detalj, en rad ser t.ex. ut som:
#1   MENING   HÄR

Vilket innebär att den andra delen av länken inte kommer med, jag vill ha det som t.ex att den delar upp en boktitel, ber om ursäkt om jag vart otydlig med detta, så om det var en bok det handlade om hade det sett ut som <a href=""länk"">Jens Lapidus - Snabba Cash</a>. Försvinner en del då så, är det inte som det ska.

Problemet jag just insåg med detta själv är att en användare skulle ju kunna av misstag skriva Jens Lapidus - Snabba Cash - Pocket. Men kanske kan man göra så att bara det första "-" tecknet är det som RegExp:en reagerar på? För om själva titeln innehåller ännu ett "-" spelar ingen som helst roll, utan det är just att det "-" som är mellan Författare och Bok måste som funktionen ovan gör, skilja dem åt med ett mellanrum istället.

Kan man ens göra detta?

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
ID: #19264 | Skapades: 2010-01-30 14:11:50

voigtan
voigtan

Gradering

#19265

split() är ju felaktig såg jag nu, den spltar på mellanslag, inte "-":

splitValue = split(myMatch.SubMatches(0), "-")

skall det vara.

Citat:
Problemet jag just insåg med detta själv är att en användare skulle ju kunna av misstag skriva Jens Lapidus - Snabba Cash - Pocket. Men kanske kan man göra så att bara det första "-" tecknet är det som RegExp:en reagerar på? För om själva titeln innehåller ännu ett "-" spelar ingen som helst roll, utan det är just att det "-" som är mellan Författare och Bok måste som funktionen ovan gör, skilja dem åt med ett mellanrum istället.
Nej, den säger bara att det MÅSTE innehålla "två" text block och minst ett "-" mellan a-elementet, det är split:en som bryter var mellanslagen kommer.

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
Redigerades av voigtan den 30 januari 2010. Läs tidigare inlägg.
ID: #19265 | Skapades: 2010-01-30 14:27:25

Roosweb
Roosweb

Gradering

#19266

Nu börjar allting se riktigt bra ut! Fungerar som en klocka när länkarna var "<a href="länk">Text - Text</a> <a href="länk">Text - Text</a> <a href="länk">Text - Text</a>". Ett sista problem återstår dock som jag kom på i efterhand, det kommer egentligen se ut som följer: "<a href="länk">Text - Text</a><br /><a href="länk">Text - Text</a><br /><a href="länk">Text - Text</a>"

Alltså att det är "<br />" istället för bara ett mellanrum mellan länkarna, är detta något man kan fixa till?

Uppdatering:

Det var inte ens det som orsakade felet utan att "-" skrivs ut som "&ndash;"

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
Redigerades av Roosweb den 30 januari 2010. Läs tidigare inlägg.
ID: #19266 | Skapades: 2010-01-30 14:52:35

voigtan
voigtan

Gradering

#19267

kör en replace på <br /> innan du kör min funktion, eller så plockar du ju bara bort <br /> från min kod, jag tog det för givet när du skrev att du ville ha den som en lista så hade du inte gjort en radbrytning redan.

Detta kan hålla på i evighet utan att komma på en vettig lösning, det är därför det är extremt viktigt att när man få ett problem så ta man upp så många scenario som man kan som "fel" kan uppstå.

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
Redigerades av voigtan den 30 januari 2010. Läs tidigare inlägg.
ID: #19267 | Skapades: 2010-01-30 15:13:39

Roosweb
Roosweb

Gradering

#19268

Vet inte om du hann se att jag redigerade mitt inlägg, men <br /> ska såklart vara med, jag som såg fel i källkoden ... det är att "-" skrivs ut som "&ndash;" som koden inte gillar, ska se om jag kan skriva om detta i editorn!

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
ID: #19268 | Skapades: 2010-01-30 15:15:13

voigtan
voigtan

Gradering

#19269

Antingen:

1. Replace på &ndash; => "-" och kör koden som den är

2. kör en split på "&ndash;" istället för "-"

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #19269 | Skapades: 2010-01-30 15:17:53

Roosweb
Roosweb

Gradering

#19270

Jag har försökt göra på sätt #2 redan, men det som händer då är - ingenting, en tom sida renderas, detta sättet hade ju krävt mindre kod, har du en aning om varför det inte fungerar?

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
ID: #19270 | Skapades: 2010-01-30 15:27:59

Roosweb
Roosweb

Gradering

#19271

Spelar ju egentligen ingen roll, så eftersom #2 inte fungerade körde jag en replace istället.
Blev jättebra det här voigtan och precis som jag ville ha det, återigen, stort tack för all hjälp!

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
ID: #19271 | Skapades: 2010-01-30 15:54:58
© Copyright 2007-2009 Shadi Domat | Version 3.0 | Sidkarta | Policy