webForumDet fria alternativet

RegExp-problem: åäö samt mellanslag

ASP

9 svar · 695 visningar · startad av m_soderlund

Medlem sedan sep. 20026 425 inlägg
Frågan#1

Jag har problem med Regular Expressions (igen)..
Det är så att när åäö och mellanslag finns inom {citat=namn} så ersätts inte citatblocket mot html-kod, utan ser ut exempelvis så här: (ersätt { och } med [ och ])

{citat=Lars W}..får man vara vem man vill
</span><hr /></blockquote>
{citat=Åke}..hela helgen på dig
</span><hr /></blockquote>

Så här ser min funktion ut:

'Fixa citat, kod, gör länkar av [url]http://[/url] och www, plus lite till
Function FCode(str)

str = Replace(str,"<","&lt;")
str = Replace(str,VbCrLf,"<br />")
    
    
Set objRE = New regexp
objRE.Global = true
objRE.IgnoreCase = true

[b]'start citering
objRE.Pattern = "\{citat=(\w*[åäö]*)\}(\w\s)*"
str = objRE.Replace(str,"<br />{citat=$1}")

objRE.Pattern = "\{citat=(\w*[åäö]*)\}(\w\s)*"
str = objRE.Replace(str,"<blockquote><b>$1</b> skrev:<hr /><span class=""citat"">$2")

objRE.Pattern = "\{citat\}(\w*[åäö]\s*[åäö])*"
str = objRE.Replace(str,"<blockquote><br /><span class=""cit"">Citat:</span><hr /><span class=""citat"">$1")

objRE.Pattern = "\{/citat\}"
str = objRE.Replace(str,"</span><hr /></blockquote>")
'slut citering
[/b]

'start kod
objRE.Pattern = "\{kod\}"
str = objRE.Replace(str,"<blockquote><span class=""kod"">Kod:<hr />")

objRE.Pattern = "\{/kod\}"
str = objRE.Replace(str,"<hr /></span></blockquote>")
'slut kod

objRE.Pattern = "\[(b|/b|i|/i|u|/u)\]"
str = objRE.Replace(str,"<$1>")

'fixa länkar och e-postadresser
objRE.Pattern = "([url]www.[/url][^ ]*[a-z])|([url]http://[/url][^ ]*[a-z])"
str = objRE.Replace(str,"<a href=""$1$2"" target=""_blank"">$1$2</a>")

'buggfixningar
str = Replace(str,"""www","""http://www")
str = Replace(str,"""http://www""","""www""")

str = Replace(str,"<br""","""")
str = Replace(str,"<br</a> />","</a><br />")

str = Replace(str,"</span><hr""","""")
str = Replace(str,"</span><hr</a> />","</a></span><hr />")

str = Replace(str,"<blockquote><span""","""")
str = Replace(str,"<blockquote><span</a>","</a><span")
str = Replace(str,"</b</a>>","</b>")
'slut

objRE.Pattern = "([\w~\-\.]+@[\w~\-\.]+[a-z])"
str = objRE.Replace(str,"<a href=""mailto:$1"">$1</a>")
'slut länkar och e-postadresser

Set objRE = Nothing

Fcode = str
End Function
'slut

Och som vanligt - återigen tacksam för hjälp. Den som bidrar med en lösning kommer med under min tacklista i readme-filen till applikationen som funktionen används i. :)

Medlem sedan juni 20019 519 inlägg
#2

jag hade nog kört:

'Fixar åäö
str = Replace(str, "&amp;#229;", "å")
str = Replace(str, "&amp;#197;", "Å")
str = Replace(str, "&amp;#228;", "ä")
str = Replace(str, "&amp;#196;", "Ä")
str = Replace(str, "&amp;#246;", "ö")
str = Replace(mess, "&amp;#214;", "Ö")

och vid {citat=Jan Pellesson}:

objRE.Pattern = "\{citat=(.*?)}"

Jag kör (.*?) och där kan jag har mellanslag...

Medlem sedan sep. 20026 425 inlägg
#3

Hum hum, ska testa det nu..

Medlem sedan sep. 20026 425 inlägg
#4

Voigtann fick det nog att fungera perfekt, tack! Enda problemet jag har nu är med länkarna, om man skriver . efter dem så kommer det med i adressen - vilket jag ju inte vill. Här kommer funktionen som den ser ut nu:

<%

'Fixa citat, kod, gör länkar av [url]http://[/url] och www, plus lite till
Function FCode(str)

str = Replace(str,"<","&lt;")
str = Replace(str,VbCrLf,"<br />")
    
    
Set objRE = New regexp
objRE.Global = true
objRE.IgnoreCase = true

'start citering
objRE.Pattern = "\{citat=(.*?)}(\w\s)*"
str = objRE.Replace(str,"<br />{citat=$1}")

objRE.Pattern = "\{citat=(.*?)}"
str = objRE.Replace(str,"<blockquote><b>$1</b> skrev:<hr /><span class=""citat"">")

objRE.Pattern = "\{citat\}(\w[åäö]*\s[åäö]*)*"
str = objRE.Replace(str,"<blockquote><br /><span class=""cit"">Citat:</span><hr /><span class=""citat"">$1")

objRE.Pattern = "\{/citat\}"
str = objRE.Replace(str,"</span><hr /></blockquote>")
'slut citering

'start kod
objRE.Pattern = "\[kod\]"
str = objRE.Replace(str,"<blockquote><span class=""kod"">Kod:<hr />")

objRE.Pattern = "\[/kod\]"
str = objRE.Replace(str,"<hr /></span></blockquote>")
'slut kod

objRE.Pattern = "\[(b|/b|i|/i|u|/u)\]"
str = objRE.Replace(str,"<$1>")

'fixa länkar och e-postadresser
objRE.Pattern = "([url]www.[/url][^ ]*[a-z])|([url]http://[/url][^ ]*[a-z])"
str = objRE.Replace(str,"<a href=""$1$2"" target=""_blank"">$1$2</a>")

'buggfixningar
str = Replace(str,"""www","""http://www")
str = Replace(str,"""http://www""","""www""")

str = Replace(str,"<br""","""")
str = Replace(str,"<br</a> />","</a><br />")

str = Replace(str,"</span><hr""","""")
str = Replace(str,"</span><hr</a> />","</a></span><hr />")

str = Replace(str,"<blockquote><span""","""")
str = Replace(str,"<blockquote><span</a>","</a><span")
str = Replace(str,"</b</a>>","</b>")
'slut

objRE.Pattern = "([\w~\-\.]+@[\w~\-\.]+[a-z])"
str = objRE.Replace(str,"<a href=""mailto:$1"">$1</a>")
'slut länkar och e-postadresser

Set objRE = Nothing

Fcode = str
End Function
'slut%>

Bevis. :D

Medlem sedan juni 20019 519 inlägg
#5

Detta tror jag inte går.. fast jag kan ha fel (offtast jag har) men du får nog leva med det...

Medlem sedan sep. 20026 425 inlägg
#6

voigtann1 skrev:

Detta tror jag inte går.. fast jag kan ha fel (offtast jag har) men du får nog leva med det...

Det kan fixas med annorlunda RegExp-kod, men jag ska se om jag kan fixa det ändå. Det blir mer sittande framför datorn här hemma..

Vet du om att det är ett forum jag bygger, ett forum som kommer att komma upp som script på wF? Och det är heller inte vilket forum som helst, skulle jag vilja påstå. Lite fler funktioner, ej medlemsbaserat men ändå så att man kan redigera sina inlägg.. :)
Och i readme-filen till forumet kommer du sen att finnas, hittills tillsammans med @nders och Engine^. :birp för er! (Och alla andra wFare också så klart.)

Medlem sedan juni 20019 519 inlägg
#7

Såg inlägg innan med dina forum inlägg.. PM:ade Engine^ och ställde lite frågor om dom med... så jag vet vad det handlar om :e

Ska bli intressant att se resultatet

Medlem sedan sep. 20026 425 inlägg
#8

voigtann1 skrev:

Såg inlägg innan med dina forum inlägg.. PM:ade Engine^ och ställde lite frågor om dom med... så jag vet vad det handlar om :e

Ska bli intressant att se resultatet

Jo. Men jag tycker Regular Expressions är så krångligt, och inte så jättemycket fattar man av referensen heller. :/
Tur att Vides artikel fanns på webeye.nu, där lärde man sig i alla fall lite grunder. :)

Engine^ och du kanske kan förbättra funktionen tillsammans? :)

Medlem sedan juni 20019 519 inlägg
#9

det är lite konstigt att , fungera men inte . tycker jag..

Medlem sedan mars 20015 287 inlägg
#10
objRE.Pattern = "\{/citat\}"
str = objRE.Replace(str," </span><hr /></blockquote>")
'slut citering

/r Å ingen säger något fast jag klistrar in fel rad? :)

La till ett mellanslag. Testa.

258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)