Regex eerstvolgende match vinden bij punt-symbool

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Maurits de Jong

Maurits de Jong

18/01/2011 19:05:35
Quote Anchor link
Hallo 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>):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$regex
= "/\\[bold\\].+\\[\\/bold\\]/";

?>


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

PHP hulp

08/03/2021 03:42:05
 
Mark L

Mark L

18/01/2011 19:57:48
Quote Anchor link
Ik gebruik altijd (.*?). In jouw geval dus .*?
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

Maurits de Jong

18/01/2011 20:39:59
Quote Anchor link
Tnx, het werkt!

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.