Cheatah: RegExp (Perl) gesucht - oder geht es nur komplizierter?

Hallo,

ich suche in Perl eine Regular Expression, die folgendes umwandelt:

"Text<u>Text</u>Text" --> "    ____    "
also jedes Zeichen zwischen <u> und </u> durch einen Unterstrich ersetzt, jedes Zeichen außerhalb durch ein Leerzeichen. Analog dazu soll umgewandelt werden:

"Text<b>Text</b>Text" --> "    Text    "
also nur die Zeichen außerhalb von <b>...</b> durch ein Leerzeichen.

Die beiden Fälle können nicht gleichzeitig auftreten (dafür sorge ich schon), wohl aber mehrfach in der selben Zeile ("1<b>2</b>3<b>4</b>5..."). Trotz intensivster Versuche bekomme ich es leider nicht hin... kann mir jemand helfen?

Besten Dank im voraus,

Cheatah

  1. Hallo Cheatah,

    ich suche in Perl eine Regular Expression, die folgendes umwandelt:
    "Text<u>Text</u>Text" --> "    ____    "
    also jedes Zeichen zwischen <u> und </u> durch einen Unterstrich ersetzt, jedes Zeichen außerhalb durch ein Leerzeichen. Analog dazu soll umgewandelt werden:

    Vielleicht geht's auch eleganter, aber so geht's jedenfalls:

    $Zeile = "Text<u>Text</u>Text";
    $Zeile =~ /(.*?)<u>(.*?)</u>(.*?)/;
    $t1 = $1; $t2 = $2; $t3 = $3;
    $t1 =~ s/\S/ /gi;
    $t2 =~ s/./_/gi;
    $t3 =~ s/\S/ /gi;
    $Zeile = $t1.$t2.$t3."\n";
    print $Zeile;

    "Text<b>Text</b>Text" --> "    Text    "
    also nur die Zeichen außerhalb von <b>...</b> durch ein Leerzeichen.

    $Zeile = "Text<b>Text</b>Text";
    $Zeile =~ /(.*?)<b>(.*?)</b>(.*?)/;
    $t1 = $1; $t2 = $2; $t3 = $3;
    $t1 =~ s/./ /gi;
    $t3 =~ s/./ /gi;
    $Zeile = $t1.$t2.$t3."\n";
    print $Zeile;

    viele Gruesse
      Stefan Muenz

    1. Hi Stefan,

      Vielleicht geht's auch eleganter, aber so geht's jedenfalls:

      vielen Dank dafür! Ich bin zwar nicht sicher, ob das mit mehreren <b>...</b> in einer Zeile auch funktioniert, aber das macht auch nichts... ich hab 'ne Nachtschicht eingelegt une eine Lösung gefunden :-)

      Die Lösung ist noch komplizierter als Deine, ist aber getestet und funktioniert. Dabei gehe ich sozusagen zeichenweise vor und setze ein Flag, wenn die Routine auf <b> oder </b> trifft entsprechend. Je nach Zustand des Flags wird dann ein " " oder das Zeichen in einen Ausgabestring geschrieben. Bei <u> gehe ich sogar noch ganz anders vor: Ich berechne die Position des <u> und des </u> (ohne die Tags selber zu beachten) und ziehe dann in dem Bereich eine Linie - es geht nämlich um den Einsatz von Grafiken. Ich probiere mal einen Beispielaufruf:

      <img src="http://cheatah.net/cgi-bin/counttest.pl?id=cheatah&counter=test&page=main&txt=Testgrafik%20mit%0a%3cu%3eUnterstreichung%3c/u%3e%20und%0amit%20%3cb%3eFettdruck%3c/b%3e%0a%0aund%20auch%20%3cu%3emit%20%3cb%3ebeidem%3c/u%3e%20zusammen%3c/b%3e!" alt="">

      Das ganze kann man dann noch mit dem Parameter &ali=l oder &ali=r versehen, um den Text links- bzw. rechtsbündig zu kriegen. Jetzt muß ich nur noch eine Schriftartenauswahl einrichten :-)

      Cheatah