Regex eerstvolgende match vinden bij punt-symbool
Maurits de Jong
18/01/2011 19:05:35Hallo allen,
Ik wil een soort parser maken, voor het omzetten van bijvoorbeeld BB-code naar HTML.
Nu heb ik de volgende tekst:
"[bold]Dit[/bold] stukje tekst wil ik bold, en [bold]deze[/bold] ook."
Nu heb ik een reguliere expressie geschreven om het patroon te vinden en dit vervolgens om te zetten naar bold (<b>...</b>):
Let op de punt in de reguliere expressie. Deze matcht alle karakters, behalve newlines.
Maar nu heb ik een probleem: hij matcht dit:
"Dit stukje tekst wil ik bold, en deze ook."
in plaats van
"Dit stukje tekst wil ik bold, en deze ook."
De engine pakt de eerste bold-open-tag en de laatste bold-sluiten-tag, ook als daar nog open- en sluittags tussen staan.
Heeft iemand een oplossing voor dit probleem?
Alvast bedankt!
Ik wil een soort parser maken, voor het omzetten van bijvoorbeeld BB-code naar HTML.
Nu heb ik de volgende tekst:
"[bold]Dit[/bold] stukje tekst wil ik bold, en [bold]deze[/bold] ook."
Nu heb ik een reguliere expressie geschreven om het patroon te vinden en dit vervolgens om te zetten naar bold (<b>...</b>):
Let op de punt in de reguliere expressie. Deze matcht alle karakters, behalve newlines.
Maar nu heb ik een probleem: hij matcht dit:
"Dit stukje tekst wil ik bold, en deze ook."
in plaats van
"Dit stukje tekst wil ik bold, en deze ook."
De engine pakt de eerste bold-open-tag en de laatste bold-sluiten-tag, ook als daar nog open- en sluittags tussen staan.
Heeft iemand een oplossing voor dit probleem?
Alvast bedankt!
Gewijzigd op 18/01/2011 19:08:16 door Maurits de Jong
PHP hulp
11/01/2025 15:08:17Mark L
18/01/2011 19:57:48Ik gebruik altijd (.*?). In jouw geval dus .*?
Ik denk dat dit moet werken ;)
Wat een rare regex trouwens. Vanwaar de dubbele backslashes?
Ik denk dat dit moet werken ;)
Wat een rare regex trouwens. Vanwaar de dubbele backslashes?
Gewijzigd op 18/01/2011 19:58:59 door Mark L
Maurits de Jong
18/01/2011 20:39:59Tnx, het werkt!
Ik dacht bij mezelf het volgende:
PHP interpreteert elke backslash plus een volgend karakter als speciaal karakter. Omdat backslash+blokhaak open (\[) geen speciaal karakter is, is dit: \[ in principe ongeldig.
Dus daarom doe ik zo: \\[ zodat PHP het interpreteert als letterlijk \[, zodat dat vervolgens in de Regexp Engine gegooid kan worden.
Maar... Dat is dus niet nodig?
Mark L op 18/01/2011 19:57:48:
Wat een rare regex trouwens. Vanwaar de dubbele backslashes?
Ik dacht bij mezelf het volgende:
PHP interpreteert elke backslash plus een volgend karakter als speciaal karakter. Omdat backslash+blokhaak open (\[) geen speciaal karakter is, is dit: \[ in principe ongeldig.
Dus daarom doe ik zo: \\[ zodat PHP het interpreteert als letterlijk \[, zodat dat vervolgens in de Regexp Engine gegooid kan worden.
Maar... Dat is dus niet nodig?
Gewijzigd op 18/01/2011 20:41:38 door Maurits de Jong