Avatar billede carstensuurland Nybegynder
25. juni 2008 - 23:01 Der er 6 kommentarer

Til en "template engine"

Jeg har brug for at lave en template engine som kan hente hhv. tags og "loops" ud til mig - gerne via regexp. Mine templates er egentligt bare almindelige html filer, hvor der står html-kommentarer i. Disse kommentarer er mine tags.

F.eks:
<div>
  <strong> <!--#Tags.Title#--> </strong>
  <!--#LoopBegin.Records#-->
  <!--#Tags.SomeLoopData#-->
  <!--#LoopEnd.Records#-->
</div>

I eksemplet er der både almindelige tags og loop.
Mit spørgsmål er, hvordan jeg kan bruge regex til at hente mit loop? Jeg vil gerne lave et regex som kan hente selve loopet, samt alt den tekst der står mellem LoopBegin og LoopEnd.

Helt perfekt vill det være, hvis man kunne lave et regex der kunne tage højde for nestede loops, f.eks.:

<!--#LoopBegin.Records#-->
  <!--#LoopBegin.Records#-->
  <!--#LoopEnd.Records#-->
<!--#LoopEnd.Records#-->

Hér vil jeg gerne have ét match der kun returnerer det yderste loop...

Nogen forslag?
Avatar billede carstensuurland Nybegynder
25. juni 2008 - 23:04 #1
P.S.: Det er til en C# 3.5 løsning
Avatar billede roenving Novice
26. juni 2008 - 01:52 #2
Hvordan havde du forestillet dig, at det skulle gøres ?-)

-- skulle din regexp generere en fuld C#-kode, der lavede et loop, og brugte f.eks. en db-klasse til at hente alle de relevante elementer ?o]

-- umiddelbart tror jeg, du har for høje tanker om mulighederne med regexps, hvorfor ikke bruge almindelig parsing, hvor du samtidig læser forfra og bagfra til at registrere dine loop-matches og derfra kalder en klasse/metode, der kan udføre dit ønske ...
Avatar billede carstensuurland Nybegynder
26. juni 2008 - 13:53 #3
Måske vil almindelig parsing virke, men problemer dér er, at et loop med et bestemt navn, kan være tilstede mere end én gang i en template. Derfor kan jeg ikke læse bagfra for at finde "sluttagget", da det principielt kan tilhøre et andet loop.

F.eks.:

LoopBegin.Records
  .... et eller andet
LoopEnd.Records
... noget
LoopBegin.Records
  .... et eller andet
LoopEnd.Records
Avatar billede roenving Novice
26. juni 2008 - 14:07 #4
Hvis man nester loops skal de da netop nestes, dvs. fuldstændig omklamres, det er bare dårlig kodning at lave andet ,-(
Avatar billede tmi Nybegynder
13. august 2008 - 17:12 #5
Har du prøvet med følgende?

/<!--#LoopBegin\.([a-z]+)#-->(.*)<!--#LoopEnd\.\\1#-->/Us
Avatar billede carstensuurland Nybegynder
14. august 2008 - 11:14 #6
Har droppet HTML metodikken. Bruger XML i stedet. Der er noget nemmere at styre.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester