RegExp (Perl) gesucht - oder geht es nur komplizierter?
Cheatah
0 Stefan Muenz0 Cheatah
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
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
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