Toon posts:

[RegEx] Hulp bij parsen [url]

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben alweer dik een nacht bezig, maar ik kom er maar niet uit. Ik beschouw mijzelf niet als beginner wat betreft reguliere expressies, maar deze gaat me gewoon niet lukken. Hopelijk kan of wil iemand me hiermee op weg helpen.

Wat ik wil, is een reguliere expressie die onderstaande mogelijkheden in z'n geheel kan matchen:

[url]mijn link[/url]
[url=mijn link] tekst tekst (geen sluittag, maar ik voeg hem even toe omdat anders de opmaak verziekt wordt [/url])
[url=mijn link]tekst tekst[/url]

Of er nu valid urls staan tussen bijvoorbeeld [url=bla bla bla] maakt me niet zoveel uit, dat zoek ik wel weer uit zodra ik een match heb. Het probleem (of gebrek aan kennis) wat ik waarschijnlijk mis zit 'm in lookaheads. Maar ik weet nog niet helemaal hoe ze werken, en na uren klooien ben ik nog geen stap verder... Onderstaande reguliere expressie (\[url\={0,1})\]?[^\n]+?\] Matched alle gevallen tot aan het tweede ] symbool Maar daarna wordt het moeilijk. Want dan mag er alleen voorwaardelijk extra gecaptured worden: komt er na een range karakters [/url] voor in de te parsen tekst? Dan capturen tot aan die [/url]

En ik weet dat ik iets zou moeten doen als volgt:
(\[url\={0,1})\]?[^\n]+?\][^\n]+(?=\[/url\]), maar weet niet precies hoe...

Ik zou het enorm tof vinden als iemand weet hoe dit te doen...

[ Voor 57% gewijzigd door Verwijderd op 25-02-2007 05:52 ]


  • mithras
  • Registratie: Maart 2003
  • Niet online
Als je _ook_ wil matchen met niet sluitende tags, kan je beter een tokenizer met een stack-based parser gebruiken. Deze kan mogelijk je tags zelf aanvullen.
Bijvoorbeeld deze of die van .oisyn.
Het is dan een stuk makkelijk om te matchen, want met [url=mijn link] kan je kan je mijn link als argument zien en zo kan je makkelijker je parser compleet krijgen. En het is sneller dan al die regexen ;)

Verwijderd

Topicstarter
Hmmz, ziet er wel goed uit. Maar... ik programmeer asp.net vb en ik vind het gewoon veel leuker om er zelf eentje te schrijven. Alleen wil het nog niet helemaal lukken :/

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:09

crisp

Devver

Pixelated

Het schrijven van een goede parser is beslist geen sinicune, zeker niet als je dergelijke uitzonderlijke situaties wilt kunnen verwerken. Mind you dat zelfs HTML dergelijke constructs niet heeft - elements die ook als singleton gebruikt kunnen worden. HTML kent uiteraard wel optional closetags, maar dat is weer heel andere koek (ook niet bepaald eenvoudig).

Een goede parser ziet er ongeveer als volgt uit:

tokeniser -> tag matching -> tree building -> tag parsing

Deze situatie vang je af in je tag matching stage waarbij je vervolgens tijdens je tree-building kijkt of je url-tag wel of geen closetag heeft en op basis daarvan besluit hoe je 'm in de tree inpast. Vervolgens zal de tag parser op basis van dit gegeven moeten besluiten hoe 'm te parsen.

Ik kan je in ieder geval vertellen dat je dit op basis van puur reguliere expressies niet gaat lukken ;)

Intentionally left blank