Luis: Tags aus Text entfernen

Hallo Spezialisten.

Ich habe ein Problem, das ich nicht lösen kann. Ich will aus einem Text sämtliche Tags einfach entfernen,
natürlich auch Zeilenübergreifend.

$message =~ s/<.+>/  /sg;

funktioniert nicht, weil dieser Befehl alles ab der ersten spitzen Klammer bis zur letzten rauslöscht, also auch
den gesamten Text zwischen dem ersten Tag und dem letzten.

Auf mit der Option \b (Wortanfang, Wortende) komme ich nicht klar.
   $message =~ s/<.+>\b/  /sg;
Das funktioniert bei einfachen Tags, nicht aber beim "a href" Tags und anderen, in denen Leerzeichen vorkommen.

Wie kann ich das Problem lösen? Es sollen einfach alle Zeichen zwischen einer öffnenden sp. Klammer "<" und
der nächstfolgenden schließenden sp. Klammer ">" entfernt werden. (Natürlich die Klammern auch)

Vielen Dank für ev. Hilfe

Luis

  1. alle teilenumbrüche entfernen sonst kann es probleme geben
    dann tags entfernen:
    ---------------------------------------------------------------
    $message =~ s/[\n\r]//g;
    $message ~ s/<[^>]*>//gs;
    ---------------------------------------------------------------
    es werden aber nicht alle tags damit entfernt:
    <!-- <p>text</p>-->
    oder
    <script>
    function f() {
    }
    </script>
    werden nicht korreckt entfernt.
    es ist auch nicht möglich, alle varianten zu entfernen, da es ja "tausende" gibt. man sollte dann noch weitereregexp (muß man einfach testen, was nicht entfernt wurde) anfügen, um den anderen ungewollten rest zu entfernen.
    das oben beschriebene beisbiel fungtioniert nur bei einfachem quelltext!

    1. hi!

      alle teilenumbrüche entfernen sonst kann es probleme geben

      Sorry, aber das ist quatsch. Wieso sollte es mit Zeilenumbrüchen
      Probleme geben? Hast du irgendwelche Beispiele?

      bye, Frank!

  2. hi!

    Ich habe ein Problem, das ich nicht lösen kann. Ich will aus einem
    Text sämtliche Tags einfach entfernen, natürlich auch
    Zeilenübergreifend.
       $message =~ s/<.+>/  /sg;
    funktioniert nicht, weil dieser Befehl alles ab der ersten spitzen
    Klammer bis zur letzten rauslöscht, also auch den gesamten Text
    zwischen dem ersten Tag und dem letzten.

    Das liegt daran, dass reguläre Ausdrücke "gierig" (engl. "greedy")
    sind, d.h. sie matchen möglichst viel statt möglichst wenig. Das kann
    man durch ein ? allerdings ändern:
      $message =~ s/<.+?>//sg;

    bye, Frank!

    1. Danke,

      habs kapiert. Funktioniert jetzt einwandfrei, auch wenn Zeilenumbrüche im tag sind.

      Kommentare und scripts kommen im text nicht vor, so dass mir diese tag´s keine Probleme machen.

      Vielen Dank

      Luis