linux-l: Hi mal wieder
Jens Dreger
jens.dreger at physik.fu-berlin.de
Fr Jul 28 14:39:30 CEST 2000
On Fri, Jul 28, 2000 at 02:13:00PM +0200, Manuel Tennert wrote:
> Aus:
> if ($string =~ /\\par(.*?)<note>(.*?)<\/note>/) {
> $i = $1;
> $j = $2;
> $string =~ s/\\par(.*?)<note>(.*?)/<note>$j<\/note>\\par$i/g;
> }
> wird leider kein Umtauscher...er arbeitet jedenfalls nicht ganz korrekt !
> Eigentlich will ich nur das was vor <note>bla</note> steht dahinter bringen !
> Leider nimmt er beim $i noch das </note> mit und den Text der nach <note> steht !
> Weiß jemand was hier verqueert läuft ??
Also, zunaechst waere es nett, wenn Du cut-n-paste faehige Beispiele
bringen koenntest, also sowas hier:
--------8<------------
#!/usr/local/bin/perl -w
$string = shift @ARGV;
if ($string =~ /\\par(.*?)<note>(.*?)<\/note>/) {
$i = $1;
$j = $2;
$string =~ s/\\par(.*?)<note>(.*?)<\/note>/<note>$j<\/note>\\par$i/g;
}
print $string,"\n";
--------8<---------------------
Dann eine Beispielzeile:
./tausch.pl "\parblah<note>blub</note>"
und was rauskommen soll:
<note>blub</note>\parblah
Das wuerde es etwas vereinfachen. Nun, der Fehler ist in meiner
Version schon behoben. Ansonsten wuerde ich das ganze durch die Zeile
$string =~ s|(\\par.*?)(<note>.*?</note>)|${2}${1}|;
ersetzen. Die Ersetzung findet sowieso nur statt, wenn der erste Teil
matched. Damit ist das if(...) ueberfluessig.
Nur so eine Idee...
Gruss,
Jens.
Mehr Informationen über die Mailingliste linux-l