Moin!
Hier eine Variante die mit den Umbrüchen klarkommt, vorausgesetzt, Du kannst damit leben, daß die gesamten Daten auf einmal in den Speicher geladen werden dürfen (Die 3 Zeilen bei "SLURP:".
Zudem spare ich das mehrfache abarbeiten desselben Strings indem er erstmal in Gruppen (mit Klammern / ihne Klammern) geteilt wird (split) und die mit Klammern (jede 2te/ungerade) einfach von allen <...> befreit wird.
#!/usr/bin/perl
use strict;
use warnings;
SLURP: { local $/;
$_= <DATA>;
}
my $odd=1;
foreach ( split /(\{[^}]*\})/s ) {
if ( $odd= 1-$odd ) {
s/<[^>]*>//g;
}
print;
}
__DATA__
OK: {Berlin, Bremen} .... {Rom - Pisa} .... {Castrop<br> Rauxel} ..
OK: {Berlin, Bremen} .... {Rom - Pisa} .... {Castrop<br> <br>Rauxel} ..
OK: {Berlin, Bremen} .... {Rom <br> Pisa} .... {Castrop<br> Rauxel} ..
OK: {Berlin, <br> Bremen} .... {Rom <br><br> Pisa} .... {Castrop<br> Rauxel} ..
OK: {Berlin, Bremen<br>} .... {Rom - Pisa} .... {Castrop<br> Rauxel} ..
NICHT OK 1a:{Berlin, Bremen} .... {Rom - Pisa} .... {Castrop<br>
NICHT OK 1b:Rauxel} ..
NICHT OK 2a:{Berlin, Bremen} .... {Rom - Pisa} .... {Castrop<br
NICHT OK 2b:>Rauxel} ..
-- Skeeve