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