[PHP]Regular Expressions bij BBcode

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • David
  • Registratie: Februari 2001
  • Laatst online: 14-09 20:01
Ik ben een primitieve BBcode-parsefunctie aan het maken met regular expressions in PHP (de standaard POSIX ereg en ereg_replace). Voor de bold-tag ziet dat er bijvoorbeeld als volgt uit:
PHP:
1
2
$content = ereg_replace("\\[b\](.+)\\[/b\]",
                 '<b>\1</b>', $content);


Dit gaat helaas niet goed als er meerdere tags genest zijn, dus eigenlijk is het de bedoeling dat er tussen [ b] en [/ b] geen nieuwe occurrence van de [ b]-tag zijn. Ik heb zelf al zitten prutsen, maar volgens mij is dit niet helemaal valid :Y) ('t werkt niet)
PHP:
1
2
$content = ereg_replace("\\[b\]([.^\\[b\]]+)\\[/b\]",
                 '<b>\1</b>', $content);


Hoe krijg ik dit voor elkaar?
Ps. dit is geen scriptrequest. Ik zou het maar al te graag zelf oplossen, maar de diverse bronnen over regular expressions helpen mij niet veel verder.

Dato DUO synth voor twee


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Met POSIX gaat je dat niet lukken. PCRE kent wel recursie dmv de (?R) afvraging.
Zie ook dit topic
Bedenk wel dat dit een second-best oplossing is, en je waarschijnlijk een functie nodig heb om nog iets met de geneste tags te doen (eventueel ook recursief). De beste oplossing is nog steeds een stack-based parser te gebruiken.

btw: de PCRE syntax is uitgebreider en daarbij ook sneller dan POSIX. De PCRE syntax wordt daarbij ook in meerdere talen ondersteund (Perl, javascript, VBscript etc)

[ Voor 18% gewijzigd door crisp op 22-05-2003 10:21 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • David
  • Registratie: Februari 2001
  • Laatst online: 14-09 20:01
Bedankt! In dat topic kan ik wel genoeg vinden om de boel werkend te krijgen.

Dato DUO synth voor twee