Regex Problem - BBCode-Tags im BBcode-Tag Parsen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Regex Problem - BBCode-Tags im BBcode-Tag Parsen

    Hallo zusammen.
    Ich habe ein kleines Problem mit meinen Regex-Code.

    Und zwar, bin Ich mir gerade einen BBCode-Parser am Basteln, funktioniert Prima, bis er Tags im Tag finden soll.

    Beispiel:
    [font=verdana,10px,#aaa][b]M[/b]e[u]s[/u]s[i]a[/i]g[s]e[/s][/font]
    Den Code Font, findet er Wunderbar, die anderen leider nicht.

    Array ( [0] => Array ( [0] => [font=verdana,10px,#AAA][b]M[/b]e[u]s[/u]s[i]a[/i]g[s]e[/s][/font] [1] => font [2] => =verdana,10px,#AAA [3] => [b]M[/b]e[u]s[/u]s[i]a[/i]g[s]e[/s] ) )
    Ich benutzte preg_match_all mit folgenden Regex:
    /\[(font|b|u|i|s)?([=|\'|"|,|#|a-zA-Z0-9|:]*)\](.*)\[\/\\1\]/isU
    Die BBCodes werden damit gesucht und weiter vearbeitet.

    Wäre sehr Nett, wenn mir da jemand helfen könnte.

    Gruß,
    nonName

  • #2
    Hallo,

    du kannst dich entweder mit rekursiven Patterns beschäftigen oder eckige Klammern zwischen Tags verbieten, so dass du nur die innersten BBCodes findest, diese verarbeitest und von vorn anfängst, bis kein BBCode mehr gefunden wird.

    Also:
    Code:
    [foo][bar]Hello World![/bar][/foo]
    erstmal zu
    Code:
    [foo]ge'bar'tes Hello World![/foo]
    und im nächsten Durchlauf zu
    Code:
    ge'foo'tes ge'bar'tes Hello World!
    verarbeiten.

    Mit rekursiven regulären Ausdrücken ist es fast genauso, nur dass du dich damit von außen nach innen durcharbeiten musst und sie sowohl etwas kniffliger in der Verwendung als auch langsamer sind.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Oder Du setzt z.B. die "BBCode Parserklasse von Christian Seiler" ein!
      Wir werden alle sterben

      Kommentar


      • #4
        Einen BBCode Parser selbst schreiben macht wenig Sinn, ausser man will wissen, wie man es realisiert. Aber für den praktischten Einsatz in einem PHP-Projekt würde ich auch zu einer fertigen Parser-Klasse tendieren (@combie).

        Kommentar


        • #5
          Danke, aber genau das will Ich nicht.
          Ich habe bisher alles selber geschrieben, auch edliche BBCode-Klassen.
          Jetzt möchte Ich aber mal eine andere Variante ausprobieren.

          @ Combie, den Beitrag hättest Du dir sparen können.
          Wenn Ich eine Fremde Klasse/Script verwenden hätte wollen, hätte Ich dieses Thema nicht eröffnet.

          @AmicaNoctis, wäre sehr nett, wenn Du mal ein Beispiel posten könntest.
          Hab mich jetzt zwar zweieinhalbstunden damit beschäftigt, nur habe Ich bisher kein Vernünpftiges Ergebnis, welches Ich auch verwenden kann. Zudem erschwert es, das kaum eine Deutsche seite über "rekursiven Patterns" zu finden ist.

          Ich bin nicht so der Regex-Experte, bestimmte kleine sachen Funktionieren meistens, mit rekursiven patterns hatte Ich bisher nichts zutun.
          Wäre sehr Nett, wenn da jemand ein Beispiel oder Seite posten könnte.

          Gruß,
          nonName

          Kommentar


          • #6
            Ich hab dir doch geschrieben, dass du rekursive Patterns nicht brauchst und ich sie auch nicht für die beste Wahl halte. Dann nimm doch einfach die andere von mir beschriebene Variante. Alles, was du tun musst, ist eckige Klammern zwischen Tags zu verbieten und das ganze in einer Schleife abzuarbeiten, bis keine Ersetzung mehr vorkommt.

            Wenn du es noch genauer brauchst: Ersetze (.*) in deinem Pattern einfach durch ([^[\]]*) zu ersetzen.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Zitat von AmicaNoctis
              du kannst dich entweder mit rekursiven Patterns beschäftigen oder eckige Klammern zwischen Tags verbieten,
              *Hust*

              Ich werd mal schauen...

              Kommentar

              Lädt...
              X