webForumDet fria alternativet

RegExp och servercrash

ASPur ASP

2 svar · 264 visningar · startad av Sebbe

Medlem sedan jan. 20032 285 inlägg
Frågan#1

Jag har ett "litet" problem med mina RegExp-patterns. Jag har försökt söka på Google efter svar, men har tyvärr inte lyckats hitta något som har hjälpt. Jag har heller inte lyckats hitta något mönster för när problemet infaller.

Jag använder RegExp för att formatera texten i artiklarna på min sida, men vid vissa tillfällen när man läser en artikel som formateras med RegExp:n hänger sig servern (detta händer alltså varje gång på den artikeln, det är inget som händer totalt slumpvis). Det enda jag tror jag har förstått är att det inträffar när det används väldigt många "koder" i en och samma artikel, och därför gör så att RegExp-motorn får väldigt mycket att jobba med. Jag har även lyckats få fram detta från en Google-sökning:

Regexp crashes on patterns, with char sequences longer than 15 chars. actually this exception occurs only when RE.match should return true - e.g. when the chars in the word are between 4, 16. if the right limit is <= 15, everything is ok - it returns true || false. but when it is bigger than 15, it returns false as expected, but when the string matches the regexpression, and we expect true, this exception is being thrown

Dock tror jag inte det är detta det beror på, med tanke på att alla mina patterns är mer än 15 tecken långa och att servern då inte bara borde hänga sig vid vissa tillfällen.

Koden med RegExp:n ser ut som följer:

Function ForumKod(str)
  strReturn = str
  strReturn = Server.HTMLEncode(strReturn)
  strReturn = Replace(strReturn, Chr(10), "<br/>")
  strReturn = Replace(strReturn, vbCrLf, "<br/>")
  strReturn = Trim(strReturn)

  With New RegExp
    .IgnoreCase = True
    .Global = True
    .Pattern = "\[begrepp\]((.|\s)+?)\[/begrepp\]"
    strReturn = .Replace(strReturn, "<table><tr><td style=""vertical-align: top;""><img src=""images/nytt_begrepp.gif"" alt=""Nytt Begrepp!"" /></td><td style=""vertical-align: top; font-family: trebuchet ms, verdana, arial, sans serif; color: #5E8CA3; font-size: 11px;"">$1</td></tr></table>")

    .Pattern = "\[tips\]((.|\s)+?)\[/tips\]"
    strReturn = .Replace(strReturn, "<table><tr><td style=""vertical-align: top;""><img src=""images/tips.gif"" alt=""Tips!"" /></td><td style=""vertical-align: top; font-family: trebuchet ms, verdana, arial, sans serif; color: #9B6E5B; font-size: 11px;"">$1</td></tr></table>")

    .Pattern = "\[color=(.+)\]((.|\s)+?)\[/color\]"
    strReturn = .Replace(strReturn, "<span style=""color: $1"">$2</span>")

    .Pattern = "\[b\]((.|\s)+?)\[/b\]"
    strReturn = .Replace(strReturn, "<b>$1</b>")

    .Pattern = "\[u\]((.|\s)+?)\[/u\]"
    strReturn = .Replace(strReturn, "<span style=""text-decoration: underline;"">$1</span>")

    .Pattern = "\[i\]((.|\s)+?)\[/i\]"
    strReturn = .Replace(strReturn, "<i>$1</i>")

    .Pattern = "\[r\]((.|\s)+?)\[/r\]"
    strReturn = .Replace(strReturn, "<p class=""small_header"" style=""margin: 0px"">$1</p>")

    .Pattern = "\[url=(.+)\]((.|\s)+?)\[/url\]"
    strReturn = .Replace(strReturn, "<a href=""$1"" onclick=""window.open(this.href); return false;"">$2</a>")
  End With

  ForumKod = Kod(strReturn)
End Function

För att sammanfatta: servern verkar hänga sig när man använder för många "koder" på samma sida, då RegExp-motorn får för mycket att göra.

Medlem sedan jan. 20032 285 inlägg
#2

Efter lite testande verkar det som om det är url-koden servern hakar upp sig på. Det enda jag kan tänka mig är "fel" är att det finns två parantessektioner, och med tanke på att jag inte har testat med color-taggen än kan det vara detta som är problemet.

Är det någon som har något tips på hur man kan åtgärda detta? :q

/red Efter att ha testat color-koden kan jag bekräfta att det inte är några problem med den. Det är alltså endast url-koden som "buggar". Mystiken tätnar... :o

Medlem sedan jan. 20032 285 inlägg
#3

Ingen som har någon aning om vad som kan vara fel?

140 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)