[PHP] Rekursive Perl Regex: <div class='a'>foo <div class='b'>bar</div></div> richtig auflösen



  • Hallo,
    ich schreib gerade ein Skript in PHP, dass einen BBCode implementieren soll. Dabei werden dann eben solche Formatierungsanweisungen wie hier im Forum in entsprechende XHTML Tags umgewandelt. Da einige Tags aber auf divs abgebildet werden, stellt sich bei der Rückumwandlung das Problem, dass die Tags eben richtig zugeordnet werden.

    Irgend wie kann man das wohl mit rekursiven Regexs machen. Aber ich werde nicht schlau, wie man die richtig benutzt. Hat jemand von euch eine Idee, wie man so etwas wie

    <div class='a'>foo <div class='b'>bar</div></div>
    

    mit Perl-Regexs in

    [a]foo [c]bar[/c][/a]
    

    umwandeln kann?



  • Hallo!

    Wär's nicht besser den Text samt den BBCodes in der DB (vermute ich mal) zu speichern? So musst du zwar bei der Ausgabe des Textes die BBCodes jedes mal in (X)HTML-Tags konvertieren, dafür hast du aber 2 entscheidende Vorteile:

    1.) Wenn du den Text editieren möchtest, dann musst du keine komplexen Regexes anwenden um die (X)HTML-Tags wieder in BBCodes umzuwandeln.
    2.) Du behältst viel Flexibilität bei wenn du die BBCodes im Text sein lässt. So kannst du an einer einzigen Stelle (bei der Ausgabe) entscheiden welche BBCodes in welche (X)HTML-Tags konvertiert werden sollen.



  • Das hat 2 Nachteile:

    1. Wird öfter gelesen als editiert
    2. Speicher ich die Daten in einer XML Datei, die ich einfach mit XPath Querie und an den Client weiter reiche, der mit XSLT das eigentliche XHTML daraus baut. Bei deinem Vorschlag müsste ich die XML Datei nun auf dem Server extra parsen und bearbeiten. Das passt nicht in mein Konzept.



  • kingruedi schrieb:

    Das hat 2 Nachteile:
    2. Speicher ich die Daten in einer XML Datei, die ich einfach mit XPath Querie und an den Client weiter reiche, der mit XSLT das eigentliche XHTML daraus baut. Bei deinem Vorschlag müsste ich die XML Datei nun auf dem Server extra parsen und bearbeiten. Das passt nicht in mein Konzept.

    Wenn du XSLT verwendest, dann könntest du ja die XML-Dokumente so transformieren, dass statt den XML-Tags BBCodes ausgegeben werden. Ist wahrscheinlich sicherer als sich irgendwelche komplexen Regexes auszudenken 🙂

    Eines verstehe ich aber nicht ganz: In deinem ersten Posting hast du ein Beispiel mit div-HTML-Tags gegeben. Warum verwendest du da nicht einfach individuelle XML-Tags? Vermutlich willst du dem XSLT-Parser die Zeit ersparen diese XML-Tags in XHTML-Tags umzuwandeln. Daher speicherst du deine Dokumente gleich mit XHTML-Tags und Klasseninformationen, oder? :p



  • regexp versagen bei sowas, du kannst es gerne versuchen nur die regexp werden sowas von unwartbar
    versuche nicht das ziel zu verfolgen alles in ein regexp zu bekommen
    welche sprache benutz du den? bei php kanns du es mit rekrusion und preg_replace_callback machen und sonst kannst du dir ja das preg_replace_callback nachbauen
    wenn du willst kann ich dir auch den kern des bbcodes mod senden


Anmelden zum Antworten