webForumDet fria alternativet

Regexp forumkod - kontrollera stängda taggar

Programmering

3 svar · 227 visningar · startad av Pace

Medlem sedan juni 20019 024 inlägg
Frågan#1

Hola!

Använder regular expressions för så kallad forumkod - t ex göra om till <b> och så vidare. Men problemet är bara att om man inte avslutar en påbörjad tagg (...) så skjuter regexpmotorn i höjden och låser processorn med 100 % processoraktivitet.

Så min undring är om man på något sätt kan kontrollera att det verkligen finns en sluttag och att servern inte kraschar bara för att sluttag fattas. Den nuvarande regexpen ser ut enligt följande:

\[b\]((.|\s)*?)\[/b\]

Fenomenet uppstår både med VbScript 5.6 i Asp och .Net Framework 1.1, System.Text.RegularExpressions. Exempel på Vb.Net-koden:

Dim RegExp As RegEx = New Regex("\[b\]((.|\s)*?)\[/b\]", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
Text = RegExp.Replace(Text, "<b>$1</b>")
Medlem sedan maj 20021 466 inlägg
#2

Jag har testat med .Net Framework 1.1 och fenomenet inträffar inte för mig.

Jag har provat:
"Dim text As String = "hej **på[/] dig""

Vad använder du när det inte fungerar?**

Medlem sedan juni 20019 024 inlägg
#3

Det blir bara så på längre texter, inte enstaka strängar.

Gör som så att du kopierar hela den här html-sidan med Ctrl+A, Ctrl+C och parsar den texten. Då kommer aspnet_wp att hänga sig.

Medlem sedan juni 20019 024 inlägg
#4

Woho!

Lyckades lösa det med:

\[b\][red](.*?)[/red]\[/b\]

Alltså väldigt simpel lösning som jag borde ha förstått. :e

250 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)