Moin!
Das funktioniert aus mehreren Gründen nicht. Zum einen erfaßt Du mit Deinem .*? schon zuviel, zum anderen mußt Du den Ausdruck mehrfach laufen lassen, da Du bei einem (vereinfachte Darstellung) Ausdruck /{.*?</ im String "{ xxx <br> <br>" nach der ersten Ersetzung bereits den Teil ""{ xxx <br>" abgearbeitet hast und das zweite <br> keine öffnedne Klammer mehr findet.
Hier ein Script das es in vielen Fällen tut:
#!/usr/bin/perl
use strict;
use warnings;
while (<DATA>) {
1 while s/(\{[^}<]*)<[^}>]*>(?=[^}]*\})/$1/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