webForumDet fria alternativet

Regexp i .NET

.NETur .NET

4 svar · 270 visningar · startad av cyprys

cyprysMedlem sedan dec. 20003 563 inlägg
#1

Var inte den brightaste på regexp i ASP 3 men lärde mig lite i slutet av den tiden. Hur funkar detta i .NET?
Jag får det att funka helt ok vad gäller validexpressionvalidator men när det gäller att söka igenom en sträng för publicering?

Någon som kan ge ett enkelt exempel på hur det ser ut med alla klasser som behövs m.m? T.ex Byta ut mot <b></b>

PaceMedlem sedan juni 20019 024 inlägg
#2

Jag är ingen hejare på RegExp-mönster, men jag vet tillräckligt för att göra enklare saker. Nedan är en liten del taget ur en "forumkod"-metod.

Public Shared Function Parse(ByVal strText As String)
	' [ b ]...[ /b ]
	Dim objRegExp As RegEx = New Regex("\[b\]((.|\s)*?)\[/b\]", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
	strText = objRegExp.Replace(strText, "<b>$1</b>")
	Return strText
End Function
developerMedlem sedan aug. 2001458 inlägg
#3

Pace skrev:

Public Shared Function Parse(ByVal strText As String)
	' [ b ]...[ /b ]
	Dim objRegExp As RegEx = New Regex("\[b\]((.|\s)*?)\[/b\]", RegexOptions.IgnoreCase Or [red][3]RegexOptions.Compiled[/3][/red])
	strText = objRegExp.Replace(strText, "<b>$1</b>")
	Return strText
End Function

Ovidkommande kanske, men tänk på att för att dra nytta av RegexOptions.Compiled ska du spara det regexp:et som en medlemsvariabel (helst statisk) som du återanvänder i metoden. Annars kommer du ändå kompilera om det vid varje anrop.

cyprysMedlem sedan dec. 20003 563 inlägg
#4

uh? HÄnger inte med där developer...

developerMedlem sedan aug. 2001458 inlägg
#5

Såhär. Anledningen för att använda "RegexOptions.Compiled" är av prestandaskäl, för att slippa att yttrycket kompileras om varje anrop. Men som du använder objRegExp, skapas ju en ny instans vid varje anrop, och då görs en omkompilering varje gång. Långsamt.

Gör istället såhär:

Private Shared objRegExp As Regex = New Regex("\[b\]((.|\s)*?)\[/b\]", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
Public Shared Function Parse(ByVal strText As String)
	strText = objRegExp.Replace(strText, "<b>$1</b>")
	Return strText
End Function

dvs lägg ditt RegEx utanför metoden och därmed kommer du återanvända samma RegEx varje gång man anropar Parse().

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