Daniel: Ersetzen von [u] .. [/u] durch <u> .. </u>

Hallo!

Wie kann ich folgendes mit Perl machen:

// underline text
$post = preg_replace("/[u](.*)[/u]/iUms","<u>\1</u>",$post);

Ich denke ihr wisst was ich such!

Danke schonmal!
Daniel

  1. 你好 Daniel,

    Wie kann ich folgendes mit Perl machen:

    // underline text
    $post = preg_replace("/[u](.*)[/u]/iUms","<u>\1</u>",$post);

    $post =~ s/[u](.*?)[/u]/<u>$1</u>/ig

    Du solltest dir aber klar sein, dass das uU nicht hinhaut. Da brauchst du
    schon einen richtigen[tm] Parser fuer.

    再见,
     CK

    --
    Ich bewundere wirklich den Sinn der Bienen für kollektive Verantwortung. Obwohl sich einzelne Bienen hin und wieder bekämpfen, herrscht zwischen Ihnen grundsätzlich ein starkes Gefühl für Eintracht und Zusammenarbeit. Wir Menschen gelten als sehr viel weiter entwickelt, doch mitunter rangieren wir sogar hinter kleinen Insekten.
    http://wwwtech.de/
    1. $post =~ s/[u](.*?)[/u]/<u>$1</u>/ig

      Du solltest dir aber klar sein, dass das uU nicht hinhaut. Da brauchst du
      schon einen richtigen[tm] Parser fuer.

      Was gibts dabei für Problem bzw. kann es geben?

      Gibts irgendwo ein Modul für solche Zwecke?

      再见,
      CK

      Danke!
      Daniel

      1. 你好 Daniel,

        $post =~ s/[u](.*?)[/u]/<u>$1</u>/ig

        Du solltest dir aber klar sein, dass das uU nicht hinhaut. Da brauchst
        du schon einen richtigen[tm] Parser fuer.

        Was gibts dabei für Problem bzw. kann es geben?

        Einfachstes Beispiel: verschachtelte <ul> sind nicht erlaubt, wuerden aber
        durch deinen Regex erstellt. Faengst du mit mehreren solcher BBCodes an,
        kann es sein, dass sehr invalides HTML produziert wird.

        Gibts irgendwo ein Modul für solche Zwecke?

        Ja, HTML::BBCode. Ich habe aber keinerlei Ahnung, wie gut das ist.

        再见,
         CK

        --
        Der Verstand steht ueber allem. Was durch die Vorstellungskraft nicht geschaffen werden kann, existiert nicht.
        http://wwwtech.de/
        1. Einfachstes Beispiel: verschachtelte <ul> sind nicht erlaubt, wuerden aber
          durch deinen Regex erstellt. Faengst du mit mehreren solcher BBCodes an,
          kann es sein, dass sehr invalides HTML produziert wird.

          Ok, ist logisch.

          Ja, HTML::BBCode. Ich habe aber keinerlei Ahnung, wie gut das ist.

          So auf den ersten Blick funktionierts mal ganz gut. Vielen Dank!

          再见,
          CK

          Daniel

        2. Tag Christian.

          Gibts irgendwo ein Modul für solche Zwecke?
          Ja, HTML::BBCode.

          Oh, das passt mir aber gut in den Kram, werde mal berichten. Danke für den Hinweis :)

          Siechfred

          --
          »Sie kochten heimlich mit Wasser und tranken öffentlich Wein.«
          1. Tag.

            HTML::BBCode.

            So, habe das Modul getestet, sieht auch ganz gut aus. Verschachtelungen werden grundsätzlich richtig umgesetzt, der erzeugte HTML-Code ist valide. Einzig die Verschachtelung von [url], [img] und [email] funktioniert noch nicht so recht, es kommt ziemlicher Blödsinn raus, wenn man sowas parsen lässt (z.B. weil der Link fett geschrieben werden soll):

            [url][b]http://www.example.org[/b][/url]

            Dem kommt man aber (bis zur neuen Version, an der zurzeit gearbeitet wird) durch Änderungen an den verwendeten Regulären Ausdrücken bei, indem man in den relevanten Originalzeilen

            my %match = (
                 url   => qr|[url=?([^]]+?)?](.+?)[/url]|iso,
                 email => qr|[email](.+?)[/email]|iso,
                 img   => qr|[img](.+?)[/img]|iso );

            das (.+?) durch ([a-zA-Z0-9@&_./,;?]+?) ersetzt (ich hoffe, dass die Zeichenklasse vollständig ist). Bis zur neuen Version allemal eine Krücke, denke ich :)

            Siechfred

            --
            »Sie kochten heimlich mit Wasser und tranken öffentlich Wein.«