Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi BBCode parsen (https://www.delphipraxis.net/77831-bbcode-parsen.html)

3_of_8 25. Sep 2006 14:48


BBCode parsen
 
Morgen. Ich hab grad ein recht unschönes Problem damit, BBCodes zu parsen.

Angenommen ich habe folgenden Text:

Code:
[code]Blubb
[/code]asdf
Code:
[code]Blubb
[/code]

Daraus soll jetzt folgendes werden:

<div class="box">
Code:
Blubb
</div>

Wenn ich jetzt aber einfach sowas hier mache:
Code:
      $text=preg_replace('#\['.$bbcode["code"].'(=([^\]]*))?\](.*)\[/'.
        $bbcode["code"].'\]#ise', '$this->parsebbcode(\''.$bbcode["code"].
        '\', \''.$bbcode["replacement"].'\', \'$3\', \'$2\')', $text);
Dann parst das Ding:
<div class="box">
Code:
Blubb
[/code]asdf[code]
Code:
Blubb
</div>

Wenn ich den Operator bei (.*) non-greedy mache, parst er so:

<div class="box">
Code:
Blubb</div>
asdf<div class="box">
Code:
Blubb</div>
Wie kann ich das so hinkriegen, wie ich es will? Und wie verhindere ich, dass ein innerhalb eines geparst wird?

Green 25. Sep 2006 18:37

Re: BBCode parsen
 
Zitat:

Zitat von 3_of_8
...
Wie kann ich das so hinkriegen, wie ich es will? Und wie verhindere ich, dass ein innerhalb eines geparst wird?

Wenn er das erste code findet ne bool setzen und dann bei jedem folgenden code nen zähler erhöhen. bei /code den Zähler verringern und wenn er wieder bei null ist, die box schliessen.

3_of_8 25. Sep 2006 19:04

Re: BBCode parsen
 
Und wie mach ich das in ner Regex?

igel457 25. Sep 2006 19:08

Re: BBCode parsen
 
Auch wenns vieleicht nicht so richtig hier rein passt...

Vieleicht interessiert dich das hier: http://www.christian-seiler.de/projekte/php/bbcode/


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz